Merge branch 'omap/headers4' into next/cleanup
This commit is contained in:
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* clkdev <-> OMAP integration
|
||||
*
|
||||
* Russell King <linux@arm.linux.org.uk>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_CLKDEV_OMAP_H
|
||||
#define __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_CLKDEV_OMAP_H
|
||||
|
||||
#include <linux/clkdev.h>
|
||||
|
||||
struct omap_clk {
|
||||
u16 cpu;
|
||||
struct clk_lookup lk;
|
||||
};
|
||||
|
||||
#define CLK(dev, con, ck, cp) \
|
||||
{ \
|
||||
.cpu = cp, \
|
||||
.lk = { \
|
||||
.dev_id = dev, \
|
||||
.con_id = con, \
|
||||
.clk = ck, \
|
||||
}, \
|
||||
}
|
||||
|
||||
/* Platform flags for the clkdev-OMAP integration code */
|
||||
#define CK_310 (1 << 0)
|
||||
#define CK_7XX (1 << 1) /* 7xx, 850 */
|
||||
#define CK_1510 (1 << 2)
|
||||
#define CK_16XX (1 << 3) /* 16xx, 17xx, 5912 */
|
||||
#define CK_242X (1 << 4)
|
||||
#define CK_243X (1 << 5) /* 243x, 253x */
|
||||
#define CK_3430ES1 (1 << 6) /* 34xxES1 only */
|
||||
#define CK_3430ES2PLUS (1 << 7) /* 34xxES2, ES3, non-Sitara 35xx only */
|
||||
#define CK_AM35XX (1 << 9) /* Sitara AM35xx */
|
||||
#define CK_36XX (1 << 10) /* 36xx/37xx-specific clocks */
|
||||
#define CK_443X (1 << 11)
|
||||
#define CK_TI816X (1 << 12)
|
||||
#define CK_446X (1 << 13)
|
||||
#define CK_AM33XX (1 << 14) /* AM33xx specific clocks */
|
||||
#define CK_1710 (1 << 15) /* 1710 extra for rate selection */
|
||||
|
||||
|
||||
#define CK_34XX (CK_3430ES1 | CK_3430ES2PLUS)
|
||||
#define CK_3XXX (CK_34XX | CK_AM35XX | CK_36XX)
|
||||
|
||||
|
||||
#endif
|
||||
|
@@ -1,309 +0,0 @@
|
||||
/*
|
||||
* OMAP clock: data structure definitions, function prototypes, shared macros
|
||||
*
|
||||
* Copyright (C) 2004-2005, 2008-2010 Nokia Corporation
|
||||
* Written by Tuukka Tikkanen <tuukka.tikkanen@elektrobit.com>
|
||||
* Based on clocks.h by Tony Lindgren, Gordon McNutt and RidgeRun, Inc
|
||||
*
|
||||
* 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 __ARCH_ARM_OMAP_CLOCK_H
|
||||
#define __ARCH_ARM_OMAP_CLOCK_H
|
||||
|
||||
#include <linux/list.h>
|
||||
|
||||
struct module;
|
||||
struct clk;
|
||||
struct clockdomain;
|
||||
|
||||
/* Temporary, needed during the common clock framework conversion */
|
||||
#define __clk_get_name(clk) (clk->name)
|
||||
#define __clk_get_parent(clk) (clk->parent)
|
||||
#define __clk_get_rate(clk) (clk->rate)
|
||||
|
||||
/**
|
||||
* struct clkops - some clock function pointers
|
||||
* @enable: fn ptr that enables the current clock in hardware
|
||||
* @disable: fn ptr that enables the current clock in hardware
|
||||
* @find_idlest: function returning the IDLEST register for the clock's IP blk
|
||||
* @find_companion: function returning the "companion" clk reg for the clock
|
||||
* @allow_idle: fn ptr that enables autoidle for the current clock in hardware
|
||||
* @deny_idle: fn ptr that disables autoidle for the current clock in hardware
|
||||
*
|
||||
* A "companion" clk is an accompanying clock to the one being queried
|
||||
* that must be enabled for the IP module connected to the clock to
|
||||
* become accessible by the hardware. Neither @find_idlest nor
|
||||
* @find_companion should be needed; that information is IP
|
||||
* block-specific; the hwmod code has been created to handle this, but
|
||||
* until hwmod data is ready and drivers have been converted to use PM
|
||||
* runtime calls in place of clk_enable()/clk_disable(), @find_idlest and
|
||||
* @find_companion must, unfortunately, remain.
|
||||
*/
|
||||
struct clkops {
|
||||
int (*enable)(struct clk *);
|
||||
void (*disable)(struct clk *);
|
||||
void (*find_idlest)(struct clk *, void __iomem **,
|
||||
u8 *, u8 *);
|
||||
void (*find_companion)(struct clk *, void __iomem **,
|
||||
u8 *);
|
||||
void (*allow_idle)(struct clk *);
|
||||
void (*deny_idle)(struct clk *);
|
||||
};
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP2PLUS
|
||||
|
||||
/* struct clksel_rate.flags possibilities */
|
||||
#define RATE_IN_242X (1 << 0)
|
||||
#define RATE_IN_243X (1 << 1)
|
||||
#define RATE_IN_3430ES1 (1 << 2) /* 3430ES1 rates only */
|
||||
#define RATE_IN_3430ES2PLUS (1 << 3) /* 3430 ES >= 2 rates only */
|
||||
#define RATE_IN_36XX (1 << 4)
|
||||
#define RATE_IN_4430 (1 << 5)
|
||||
#define RATE_IN_TI816X (1 << 6)
|
||||
#define RATE_IN_4460 (1 << 7)
|
||||
#define RATE_IN_AM33XX (1 << 8)
|
||||
#define RATE_IN_TI814X (1 << 9)
|
||||
|
||||
#define RATE_IN_24XX (RATE_IN_242X | RATE_IN_243X)
|
||||
#define RATE_IN_34XX (RATE_IN_3430ES1 | RATE_IN_3430ES2PLUS)
|
||||
#define RATE_IN_3XXX (RATE_IN_34XX | RATE_IN_36XX)
|
||||
#define RATE_IN_44XX (RATE_IN_4430 | RATE_IN_4460)
|
||||
|
||||
/* RATE_IN_3430ES2PLUS_36XX includes 34xx/35xx with ES >=2, and all 36xx/37xx */
|
||||
#define RATE_IN_3430ES2PLUS_36XX (RATE_IN_3430ES2PLUS | RATE_IN_36XX)
|
||||
|
||||
|
||||
/**
|
||||
* struct clksel_rate - register bitfield values corresponding to clk divisors
|
||||
* @val: register bitfield value (shifted to bit 0)
|
||||
* @div: clock divisor corresponding to @val
|
||||
* @flags: (see "struct clksel_rate.flags possibilities" above)
|
||||
*
|
||||
* @val should match the value of a read from struct clk.clksel_reg
|
||||
* AND'ed with struct clk.clksel_mask, shifted right to bit 0.
|
||||
*
|
||||
* @div is the divisor that should be applied to the parent clock's rate
|
||||
* to produce the current clock's rate.
|
||||
*/
|
||||
struct clksel_rate {
|
||||
u32 val;
|
||||
u8 div;
|
||||
u16 flags;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct clksel - available parent clocks, and a pointer to their divisors
|
||||
* @parent: struct clk * to a possible parent clock
|
||||
* @rates: available divisors for this parent clock
|
||||
*
|
||||
* A struct clksel is always associated with one or more struct clks
|
||||
* and one or more struct clksel_rates.
|
||||
*/
|
||||
struct clksel {
|
||||
struct clk *parent;
|
||||
const struct clksel_rate *rates;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct dpll_data - DPLL registers and integration data
|
||||
* @mult_div1_reg: register containing the DPLL M and N bitfields
|
||||
* @mult_mask: mask of the DPLL M bitfield in @mult_div1_reg
|
||||
* @div1_mask: mask of the DPLL N bitfield in @mult_div1_reg
|
||||
* @clk_bypass: struct clk pointer to the clock's bypass clock input
|
||||
* @clk_ref: struct clk pointer to the clock's reference clock input
|
||||
* @control_reg: register containing the DPLL mode bitfield
|
||||
* @enable_mask: mask of the DPLL mode bitfield in @control_reg
|
||||
* @last_rounded_rate: cache of the last rate result of omap2_dpll_round_rate()
|
||||
* @last_rounded_m: cache of the last M result of omap2_dpll_round_rate()
|
||||
* @max_multiplier: maximum valid non-bypass multiplier value (actual)
|
||||
* @last_rounded_n: cache of the last N result of omap2_dpll_round_rate()
|
||||
* @min_divider: minimum valid non-bypass divider value (actual)
|
||||
* @max_divider: maximum valid non-bypass divider value (actual)
|
||||
* @modes: possible values of @enable_mask
|
||||
* @autoidle_reg: register containing the DPLL autoidle mode bitfield
|
||||
* @idlest_reg: register containing the DPLL idle status bitfield
|
||||
* @autoidle_mask: mask of the DPLL autoidle mode bitfield in @autoidle_reg
|
||||
* @freqsel_mask: mask of the DPLL jitter correction bitfield in @control_reg
|
||||
* @idlest_mask: mask of the DPLL idle status bitfield in @idlest_reg
|
||||
* @auto_recal_bit: bitshift of the driftguard enable bit in @control_reg
|
||||
* @recal_en_bit: bitshift of the PRM_IRQENABLE_* bit for recalibration IRQs
|
||||
* @recal_st_bit: bitshift of the PRM_IRQSTATUS_* bit for recalibration IRQs
|
||||
* @flags: DPLL type/features (see below)
|
||||
*
|
||||
* Possible values for @flags:
|
||||
* DPLL_J_TYPE: "J-type DPLL" (only some 36xx, 4xxx DPLLs)
|
||||
*
|
||||
* @freqsel_mask is only used on the OMAP34xx family and AM35xx.
|
||||
*
|
||||
* XXX Some DPLLs have multiple bypass inputs, so it's not technically
|
||||
* correct to only have one @clk_bypass pointer.
|
||||
*
|
||||
* XXX The runtime-variable fields (@last_rounded_rate, @last_rounded_m,
|
||||
* @last_rounded_n) should be separated from the runtime-fixed fields
|
||||
* and placed into a different structure, so that the runtime-fixed data
|
||||
* can be placed into read-only space.
|
||||
*/
|
||||
struct dpll_data {
|
||||
void __iomem *mult_div1_reg;
|
||||
u32 mult_mask;
|
||||
u32 div1_mask;
|
||||
struct clk *clk_bypass;
|
||||
struct clk *clk_ref;
|
||||
void __iomem *control_reg;
|
||||
u32 enable_mask;
|
||||
unsigned long last_rounded_rate;
|
||||
u16 last_rounded_m;
|
||||
u16 max_multiplier;
|
||||
u8 last_rounded_n;
|
||||
u8 min_divider;
|
||||
u16 max_divider;
|
||||
u8 modes;
|
||||
void __iomem *autoidle_reg;
|
||||
void __iomem *idlest_reg;
|
||||
u32 autoidle_mask;
|
||||
u32 freqsel_mask;
|
||||
u32 idlest_mask;
|
||||
u32 dco_mask;
|
||||
u32 sddiv_mask;
|
||||
u8 auto_recal_bit;
|
||||
u8 recal_en_bit;
|
||||
u8 recal_st_bit;
|
||||
u8 flags;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* struct clk.flags possibilities
|
||||
*
|
||||
* XXX document the rest of the clock flags here
|
||||
*
|
||||
* CLOCK_CLKOUTX2: (OMAP4 only) DPLL CLKOUT and CLKOUTX2 GATE_CTRL
|
||||
* bits share the same register. This flag allows the
|
||||
* omap4_dpllmx*() code to determine which GATE_CTRL bit field
|
||||
* should be used. This is a temporary solution - a better approach
|
||||
* would be to associate clock type-specific data with the clock,
|
||||
* similar to the struct dpll_data approach.
|
||||
*/
|
||||
#define ENABLE_REG_32BIT (1 << 0) /* Use 32-bit access */
|
||||
#define CLOCK_IDLE_CONTROL (1 << 1)
|
||||
#define CLOCK_NO_IDLE_PARENT (1 << 2)
|
||||
#define ENABLE_ON_INIT (1 << 3) /* Enable upon framework init */
|
||||
#define INVERT_ENABLE (1 << 4) /* 0 enables, 1 disables */
|
||||
#define CLOCK_CLKOUTX2 (1 << 5)
|
||||
|
||||
/**
|
||||
* struct clk - OMAP struct clk
|
||||
* @node: list_head connecting this clock into the full clock list
|
||||
* @ops: struct clkops * for this clock
|
||||
* @name: the name of the clock in the hardware (used in hwmod data and debug)
|
||||
* @parent: pointer to this clock's parent struct clk
|
||||
* @children: list_head connecting to the child clks' @sibling list_heads
|
||||
* @sibling: list_head connecting this clk to its parent clk's @children
|
||||
* @rate: current clock rate
|
||||
* @enable_reg: register to write to enable the clock (see @enable_bit)
|
||||
* @recalc: fn ptr that returns the clock's current rate
|
||||
* @set_rate: fn ptr that can change the clock's current rate
|
||||
* @round_rate: fn ptr that can round the clock's current rate
|
||||
* @init: fn ptr to do clock-specific initialization
|
||||
* @enable_bit: bitshift to write to enable/disable the clock (see @enable_reg)
|
||||
* @usecount: number of users that have requested this clock to be enabled
|
||||
* @fixed_div: when > 0, this clock's rate is its parent's rate / @fixed_div
|
||||
* @flags: see "struct clk.flags possibilities" above
|
||||
* @clksel_reg: for clksel clks, register va containing src/divisor select
|
||||
* @clksel_mask: bitmask in @clksel_reg for the src/divisor selector
|
||||
* @clksel: for clksel clks, pointer to struct clksel for this clock
|
||||
* @dpll_data: for DPLLs, pointer to struct dpll_data for this clock
|
||||
* @clkdm_name: clockdomain name that this clock is contained in
|
||||
* @clkdm: pointer to struct clockdomain, resolved from @clkdm_name at runtime
|
||||
* @rate_offset: bitshift for rate selection bitfield (OMAP1 only)
|
||||
* @src_offset: bitshift for source selection bitfield (OMAP1 only)
|
||||
*
|
||||
* XXX @rate_offset, @src_offset should probably be removed and OMAP1
|
||||
* clock code converted to use clksel.
|
||||
*
|
||||
* XXX @usecount is poorly named. It should be "enable_count" or
|
||||
* something similar. "users" in the description refers to kernel
|
||||
* code (core code or drivers) that have called clk_enable() and not
|
||||
* yet called clk_disable(); the usecount of parent clocks is also
|
||||
* incremented by the clock code when clk_enable() is called on child
|
||||
* clocks and decremented by the clock code when clk_disable() is
|
||||
* called on child clocks.
|
||||
*
|
||||
* XXX @clkdm, @usecount, @children, @sibling should be marked for
|
||||
* internal use only.
|
||||
*
|
||||
* @children and @sibling are used to optimize parent-to-child clock
|
||||
* tree traversals. (child-to-parent traversals use @parent.)
|
||||
*
|
||||
* XXX The notion of the clock's current rate probably needs to be
|
||||
* separated from the clock's target rate.
|
||||
*/
|
||||
struct clk {
|
||||
struct list_head node;
|
||||
const struct clkops *ops;
|
||||
const char *name;
|
||||
struct clk *parent;
|
||||
struct list_head children;
|
||||
struct list_head sibling; /* node for children */
|
||||
unsigned long rate;
|
||||
void __iomem *enable_reg;
|
||||
unsigned long (*recalc)(struct clk *);
|
||||
int (*set_rate)(struct clk *, unsigned long);
|
||||
long (*round_rate)(struct clk *, unsigned long);
|
||||
void (*init)(struct clk *);
|
||||
u8 enable_bit;
|
||||
s8 usecount;
|
||||
u8 fixed_div;
|
||||
u8 flags;
|
||||
#ifdef CONFIG_ARCH_OMAP2PLUS
|
||||
void __iomem *clksel_reg;
|
||||
u32 clksel_mask;
|
||||
const struct clksel *clksel;
|
||||
struct dpll_data *dpll_data;
|
||||
const char *clkdm_name;
|
||||
struct clockdomain *clkdm;
|
||||
#else
|
||||
u8 rate_offset;
|
||||
u8 src_offset;
|
||||
#endif
|
||||
#if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS)
|
||||
struct dentry *dent; /* For visible tree hierarchy */
|
||||
#endif
|
||||
};
|
||||
|
||||
struct clk_functions {
|
||||
int (*clk_enable)(struct clk *clk);
|
||||
void (*clk_disable)(struct clk *clk);
|
||||
long (*clk_round_rate)(struct clk *clk, unsigned long rate);
|
||||
int (*clk_set_rate)(struct clk *clk, unsigned long rate);
|
||||
int (*clk_set_parent)(struct clk *clk, struct clk *parent);
|
||||
void (*clk_allow_idle)(struct clk *clk);
|
||||
void (*clk_deny_idle)(struct clk *clk);
|
||||
void (*clk_disable_unused)(struct clk *clk);
|
||||
};
|
||||
|
||||
extern int mpurate;
|
||||
|
||||
extern int clk_init(struct clk_functions *custom_clocks);
|
||||
extern void clk_preinit(struct clk *clk);
|
||||
extern int clk_register(struct clk *clk);
|
||||
extern void clk_reparent(struct clk *child, struct clk *parent);
|
||||
extern void clk_unregister(struct clk *clk);
|
||||
extern void propagate_rate(struct clk *clk);
|
||||
extern void recalculate_root_clocks(void);
|
||||
extern unsigned long followparent_recalc(struct clk *clk);
|
||||
extern void clk_enable_init_clocks(void);
|
||||
unsigned long omap_fixed_divisor_recalc(struct clk *clk);
|
||||
extern struct clk *omap_clk_get_by_name(const char *name);
|
||||
extern int omap_clk_enable_autoidle_all(void);
|
||||
extern int omap_clk_disable_autoidle_all(void);
|
||||
|
||||
extern const struct clkops clkops_null;
|
||||
|
||||
extern struct clk dummy_ck;
|
||||
|
||||
#endif
|
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
* arch/arm/plat-omap/include/mach/common.h
|
||||
*
|
||||
* Header for code common to all OMAP machines.
|
||||
*
|
||||
* 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 SOFTWARE IS PROVIDED ``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 AUTHOR 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.
|
||||
*
|
||||
* 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.,
|
||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_MACH_OMAP_COMMON_H
|
||||
#define __ARCH_ARM_MACH_OMAP_COMMON_H
|
||||
|
||||
#include <plat/i2c.h>
|
||||
#include <plat/omap_hwmod.h>
|
||||
|
||||
extern int __init omap_init_clocksource_32k(void __iomem *vbase);
|
||||
|
||||
extern void __init omap_check_revision(void);
|
||||
|
||||
extern void omap_reserve(void);
|
||||
extern int omap_dss_reset(struct omap_hwmod *);
|
||||
|
||||
void omap_sram_init(void);
|
||||
|
||||
#endif /* __ARCH_ARM_MACH_OMAP_COMMON_H */
|
1
arch/arm/plat-omap/include/plat/counter-32k.h
Normal file
1
arch/arm/plat-omap/include/plat/counter-32k.h
Normal file
@@ -0,0 +1 @@
|
||||
int omap_init_clocksource_32k(void __iomem *vbase);
|
@@ -1,6 +1,4 @@
|
||||
/*
|
||||
* arch/arm/plat-omap/include/mach/cpu.h
|
||||
*
|
||||
* OMAP cpu type detection
|
||||
*
|
||||
* Copyright (C) 2004, 2008 Nokia Corporation
|
||||
@@ -30,470 +28,12 @@
|
||||
#ifndef __ASM_ARCH_OMAP_CPU_H
|
||||
#define __ASM_ARCH_OMAP_CPU_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <plat/multi.h>
|
||||
|
||||
/*
|
||||
* Omap device type i.e. EMU/HS/TST/GP/BAD
|
||||
*/
|
||||
#define OMAP2_DEVICE_TYPE_TEST 0
|
||||
#define OMAP2_DEVICE_TYPE_EMU 1
|
||||
#define OMAP2_DEVICE_TYPE_SEC 2
|
||||
#define OMAP2_DEVICE_TYPE_GP 3
|
||||
#define OMAP2_DEVICE_TYPE_BAD 4
|
||||
|
||||
int omap_type(void);
|
||||
|
||||
/*
|
||||
* omap_rev bits:
|
||||
* CPU id bits (0730, 1510, 1710, 2422...) [31:16]
|
||||
* CPU revision (See _REV_ defined in cpu.h) [15:08]
|
||||
* CPU class bits (15xx, 16xx, 24xx, 34xx...) [07:00]
|
||||
*/
|
||||
unsigned int omap_rev(void);
|
||||
|
||||
/*
|
||||
* Get the CPU revision for OMAP devices
|
||||
*/
|
||||
#define GET_OMAP_REVISION() ((omap_rev() >> 8) & 0xff)
|
||||
|
||||
/*
|
||||
* Macros to group OMAP into cpu classes.
|
||||
* These can be used in most places.
|
||||
* cpu_is_omap7xx(): True for OMAP730, OMAP850
|
||||
* cpu_is_omap15xx(): True for OMAP1510, OMAP5910 and OMAP310
|
||||
* cpu_is_omap16xx(): True for OMAP1610, OMAP5912 and OMAP1710
|
||||
* cpu_is_omap24xx(): True for OMAP2420, OMAP2422, OMAP2423, OMAP2430
|
||||
* cpu_is_omap242x(): True for OMAP2420, OMAP2422, OMAP2423
|
||||
* cpu_is_omap243x(): True for OMAP2430
|
||||
* cpu_is_omap343x(): True for OMAP3430
|
||||
* cpu_is_omap443x(): True for OMAP4430
|
||||
* cpu_is_omap446x(): True for OMAP4460
|
||||
* cpu_is_omap447x(): True for OMAP4470
|
||||
* soc_is_omap543x(): True for OMAP5430, OMAP5432
|
||||
*/
|
||||
#define GET_OMAP_CLASS (omap_rev() & 0xff)
|
||||
|
||||
#define IS_OMAP_CLASS(class, id) \
|
||||
static inline int is_omap ##class (void) \
|
||||
{ \
|
||||
return (GET_OMAP_CLASS == (id)) ? 1 : 0; \
|
||||
}
|
||||
|
||||
#define GET_AM_CLASS ((omap_rev() >> 24) & 0xff)
|
||||
|
||||
#define IS_AM_CLASS(class, id) \
|
||||
static inline int is_am ##class (void) \
|
||||
{ \
|
||||
return (GET_AM_CLASS == (id)) ? 1 : 0; \
|
||||
}
|
||||
|
||||
#define GET_TI_CLASS ((omap_rev() >> 24) & 0xff)
|
||||
|
||||
#define IS_TI_CLASS(class, id) \
|
||||
static inline int is_ti ##class (void) \
|
||||
{ \
|
||||
return (GET_TI_CLASS == (id)) ? 1 : 0; \
|
||||
}
|
||||
|
||||
#define GET_OMAP_SUBCLASS ((omap_rev() >> 20) & 0x0fff)
|
||||
|
||||
#define IS_OMAP_SUBCLASS(subclass, id) \
|
||||
static inline int is_omap ##subclass (void) \
|
||||
{ \
|
||||
return (GET_OMAP_SUBCLASS == (id)) ? 1 : 0; \
|
||||
}
|
||||
|
||||
#define IS_TI_SUBCLASS(subclass, id) \
|
||||
static inline int is_ti ##subclass (void) \
|
||||
{ \
|
||||
return (GET_OMAP_SUBCLASS == (id)) ? 1 : 0; \
|
||||
}
|
||||
|
||||
#define IS_AM_SUBCLASS(subclass, id) \
|
||||
static inline int is_am ##subclass (void) \
|
||||
{ \
|
||||
return (GET_OMAP_SUBCLASS == (id)) ? 1 : 0; \
|
||||
}
|
||||
|
||||
IS_OMAP_CLASS(7xx, 0x07)
|
||||
IS_OMAP_CLASS(15xx, 0x15)
|
||||
IS_OMAP_CLASS(16xx, 0x16)
|
||||
IS_OMAP_CLASS(24xx, 0x24)
|
||||
IS_OMAP_CLASS(34xx, 0x34)
|
||||
IS_OMAP_CLASS(44xx, 0x44)
|
||||
IS_AM_CLASS(35xx, 0x35)
|
||||
IS_OMAP_CLASS(54xx, 0x54)
|
||||
IS_AM_CLASS(33xx, 0x33)
|
||||
|
||||
IS_TI_CLASS(81xx, 0x81)
|
||||
|
||||
IS_OMAP_SUBCLASS(242x, 0x242)
|
||||
IS_OMAP_SUBCLASS(243x, 0x243)
|
||||
IS_OMAP_SUBCLASS(343x, 0x343)
|
||||
IS_OMAP_SUBCLASS(363x, 0x363)
|
||||
IS_OMAP_SUBCLASS(443x, 0x443)
|
||||
IS_OMAP_SUBCLASS(446x, 0x446)
|
||||
IS_OMAP_SUBCLASS(447x, 0x447)
|
||||
IS_OMAP_SUBCLASS(543x, 0x543)
|
||||
|
||||
IS_TI_SUBCLASS(816x, 0x816)
|
||||
IS_TI_SUBCLASS(814x, 0x814)
|
||||
IS_AM_SUBCLASS(335x, 0x335)
|
||||
|
||||
#define cpu_is_omap7xx() 0
|
||||
#define cpu_is_omap15xx() 0
|
||||
#define cpu_is_omap16xx() 0
|
||||
#define cpu_is_omap24xx() 0
|
||||
#define cpu_is_omap242x() 0
|
||||
#define cpu_is_omap243x() 0
|
||||
#define cpu_is_omap34xx() 0
|
||||
#define cpu_is_omap343x() 0
|
||||
#define cpu_is_ti81xx() 0
|
||||
#define cpu_is_ti816x() 0
|
||||
#define cpu_is_ti814x() 0
|
||||
#define soc_is_am35xx() 0
|
||||
#define soc_is_am33xx() 0
|
||||
#define soc_is_am335x() 0
|
||||
#define cpu_is_omap44xx() 0
|
||||
#define cpu_is_omap443x() 0
|
||||
#define cpu_is_omap446x() 0
|
||||
#define cpu_is_omap447x() 0
|
||||
#define soc_is_omap54xx() 0
|
||||
#define soc_is_omap543x() 0
|
||||
|
||||
#if defined(MULTI_OMAP1)
|
||||
# if defined(CONFIG_ARCH_OMAP730)
|
||||
# undef cpu_is_omap7xx
|
||||
# define cpu_is_omap7xx() is_omap7xx()
|
||||
# endif
|
||||
# if defined(CONFIG_ARCH_OMAP850)
|
||||
# undef cpu_is_omap7xx
|
||||
# define cpu_is_omap7xx() is_omap7xx()
|
||||
# endif
|
||||
# if defined(CONFIG_ARCH_OMAP15XX)
|
||||
# undef cpu_is_omap15xx
|
||||
# define cpu_is_omap15xx() is_omap15xx()
|
||||
# endif
|
||||
# if defined(CONFIG_ARCH_OMAP16XX)
|
||||
# undef cpu_is_omap16xx
|
||||
# define cpu_is_omap16xx() is_omap16xx()
|
||||
# endif
|
||||
#else
|
||||
# if defined(CONFIG_ARCH_OMAP730)
|
||||
# undef cpu_is_omap7xx
|
||||
# define cpu_is_omap7xx() 1
|
||||
# endif
|
||||
# if defined(CONFIG_ARCH_OMAP850)
|
||||
# undef cpu_is_omap7xx
|
||||
# define cpu_is_omap7xx() 1
|
||||
# endif
|
||||
# if defined(CONFIG_ARCH_OMAP15XX)
|
||||
# undef cpu_is_omap15xx
|
||||
# define cpu_is_omap15xx() 1
|
||||
# endif
|
||||
# if defined(CONFIG_ARCH_OMAP16XX)
|
||||
# undef cpu_is_omap16xx
|
||||
# define cpu_is_omap16xx() 1
|
||||
# endif
|
||||
#ifdef CONFIG_ARCH_OMAP1
|
||||
#include <mach/soc.h>
|
||||
#endif
|
||||
|
||||
#if defined(MULTI_OMAP2)
|
||||
# if defined(CONFIG_ARCH_OMAP2)
|
||||
# undef cpu_is_omap24xx
|
||||
# define cpu_is_omap24xx() is_omap24xx()
|
||||
# endif
|
||||
# if defined (CONFIG_SOC_OMAP2420)
|
||||
# undef cpu_is_omap242x
|
||||
# define cpu_is_omap242x() is_omap242x()
|
||||
# endif
|
||||
# if defined (CONFIG_SOC_OMAP2430)
|
||||
# undef cpu_is_omap243x
|
||||
# define cpu_is_omap243x() is_omap243x()
|
||||
# endif
|
||||
# if defined(CONFIG_ARCH_OMAP3)
|
||||
# undef cpu_is_omap34xx
|
||||
# undef cpu_is_omap343x
|
||||
# define cpu_is_omap34xx() is_omap34xx()
|
||||
# define cpu_is_omap343x() is_omap343x()
|
||||
# endif
|
||||
#else
|
||||
# if defined(CONFIG_ARCH_OMAP2)
|
||||
# undef cpu_is_omap24xx
|
||||
# define cpu_is_omap24xx() 1
|
||||
# endif
|
||||
# if defined(CONFIG_SOC_OMAP2420)
|
||||
# undef cpu_is_omap242x
|
||||
# define cpu_is_omap242x() 1
|
||||
# endif
|
||||
# if defined(CONFIG_SOC_OMAP2430)
|
||||
# undef cpu_is_omap243x
|
||||
# define cpu_is_omap243x() 1
|
||||
# endif
|
||||
# if defined(CONFIG_ARCH_OMAP3)
|
||||
# undef cpu_is_omap34xx
|
||||
# define cpu_is_omap34xx() 1
|
||||
# endif
|
||||
# if defined(CONFIG_SOC_OMAP3430)
|
||||
# undef cpu_is_omap343x
|
||||
# define cpu_is_omap343x() 1
|
||||
# endif
|
||||
#ifdef CONFIG_ARCH_OMAP2PLUS
|
||||
#include "../../mach-omap2/soc.h"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Macros to detect individual cpu types.
|
||||
* These are only rarely needed.
|
||||
* cpu_is_omap310(): True for OMAP310
|
||||
* cpu_is_omap1510(): True for OMAP1510
|
||||
* cpu_is_omap1610(): True for OMAP1610
|
||||
* cpu_is_omap1611(): True for OMAP1611
|
||||
* cpu_is_omap5912(): True for OMAP5912
|
||||
* cpu_is_omap1621(): True for OMAP1621
|
||||
* cpu_is_omap1710(): True for OMAP1710
|
||||
* cpu_is_omap2420(): True for OMAP2420
|
||||
* cpu_is_omap2422(): True for OMAP2422
|
||||
* cpu_is_omap2423(): True for OMAP2423
|
||||
* cpu_is_omap2430(): True for OMAP2430
|
||||
* cpu_is_omap3430(): True for OMAP3430
|
||||
*/
|
||||
#define GET_OMAP_TYPE ((omap_rev() >> 16) & 0xffff)
|
||||
|
||||
#define IS_OMAP_TYPE(type, id) \
|
||||
static inline int is_omap ##type (void) \
|
||||
{ \
|
||||
return (GET_OMAP_TYPE == (id)) ? 1 : 0; \
|
||||
}
|
||||
|
||||
IS_OMAP_TYPE(310, 0x0310)
|
||||
IS_OMAP_TYPE(1510, 0x1510)
|
||||
IS_OMAP_TYPE(1610, 0x1610)
|
||||
IS_OMAP_TYPE(1611, 0x1611)
|
||||
IS_OMAP_TYPE(5912, 0x1611)
|
||||
IS_OMAP_TYPE(1621, 0x1621)
|
||||
IS_OMAP_TYPE(1710, 0x1710)
|
||||
IS_OMAP_TYPE(2420, 0x2420)
|
||||
IS_OMAP_TYPE(2422, 0x2422)
|
||||
IS_OMAP_TYPE(2423, 0x2423)
|
||||
IS_OMAP_TYPE(2430, 0x2430)
|
||||
IS_OMAP_TYPE(3430, 0x3430)
|
||||
|
||||
#define cpu_is_omap310() 0
|
||||
#define cpu_is_omap1510() 0
|
||||
#define cpu_is_omap1610() 0
|
||||
#define cpu_is_omap5912() 0
|
||||
#define cpu_is_omap1611() 0
|
||||
#define cpu_is_omap1621() 0
|
||||
#define cpu_is_omap1710() 0
|
||||
#define cpu_is_omap2420() 0
|
||||
#define cpu_is_omap2422() 0
|
||||
#define cpu_is_omap2423() 0
|
||||
#define cpu_is_omap2430() 0
|
||||
#define cpu_is_omap3430() 0
|
||||
#define cpu_is_omap3630() 0
|
||||
#define soc_is_omap5430() 0
|
||||
|
||||
/*
|
||||
* Whether we have MULTI_OMAP1 or not, we still need to distinguish
|
||||
* between 310 vs. 1510 and 1611B/5912 vs. 1710.
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP15XX)
|
||||
# undef cpu_is_omap310
|
||||
# undef cpu_is_omap1510
|
||||
# define cpu_is_omap310() is_omap310()
|
||||
# define cpu_is_omap1510() is_omap1510()
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP16XX)
|
||||
# undef cpu_is_omap1610
|
||||
# undef cpu_is_omap1611
|
||||
# undef cpu_is_omap5912
|
||||
# undef cpu_is_omap1621
|
||||
# undef cpu_is_omap1710
|
||||
# define cpu_is_omap1610() is_omap1610()
|
||||
# define cpu_is_omap1611() is_omap1611()
|
||||
# define cpu_is_omap5912() is_omap5912()
|
||||
# define cpu_is_omap1621() is_omap1621()
|
||||
# define cpu_is_omap1710() is_omap1710()
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP2)
|
||||
# undef cpu_is_omap2420
|
||||
# undef cpu_is_omap2422
|
||||
# undef cpu_is_omap2423
|
||||
# undef cpu_is_omap2430
|
||||
# define cpu_is_omap2420() is_omap2420()
|
||||
# define cpu_is_omap2422() is_omap2422()
|
||||
# define cpu_is_omap2423() is_omap2423()
|
||||
# define cpu_is_omap2430() is_omap2430()
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP3)
|
||||
# undef cpu_is_omap3430
|
||||
# undef cpu_is_ti81xx
|
||||
# undef cpu_is_ti816x
|
||||
# undef cpu_is_ti814x
|
||||
# undef soc_is_am35xx
|
||||
# define cpu_is_omap3430() is_omap3430()
|
||||
# undef cpu_is_omap3630
|
||||
# define cpu_is_omap3630() is_omap363x()
|
||||
# define cpu_is_ti81xx() is_ti81xx()
|
||||
# define cpu_is_ti816x() is_ti816x()
|
||||
# define cpu_is_ti814x() is_ti814x()
|
||||
# define soc_is_am35xx() is_am35xx()
|
||||
#endif
|
||||
|
||||
# if defined(CONFIG_SOC_AM33XX)
|
||||
# undef soc_is_am33xx
|
||||
# undef soc_is_am335x
|
||||
# define soc_is_am33xx() is_am33xx()
|
||||
# define soc_is_am335x() is_am335x()
|
||||
#endif
|
||||
|
||||
# if defined(CONFIG_ARCH_OMAP4)
|
||||
# undef cpu_is_omap44xx
|
||||
# undef cpu_is_omap443x
|
||||
# undef cpu_is_omap446x
|
||||
# undef cpu_is_omap447x
|
||||
# define cpu_is_omap44xx() is_omap44xx()
|
||||
# define cpu_is_omap443x() is_omap443x()
|
||||
# define cpu_is_omap446x() is_omap446x()
|
||||
# define cpu_is_omap447x() is_omap447x()
|
||||
# endif
|
||||
|
||||
# if defined(CONFIG_SOC_OMAP5)
|
||||
# undef soc_is_omap54xx
|
||||
# undef soc_is_omap543x
|
||||
# define soc_is_omap54xx() is_omap54xx()
|
||||
# define soc_is_omap543x() is_omap543x()
|
||||
#endif
|
||||
|
||||
/* Macros to detect if we have OMAP1 or OMAP2 */
|
||||
#define cpu_class_is_omap1() (cpu_is_omap7xx() || cpu_is_omap15xx() || \
|
||||
cpu_is_omap16xx())
|
||||
#define cpu_class_is_omap2() (cpu_is_omap24xx() || cpu_is_omap34xx() || \
|
||||
cpu_is_omap44xx() || soc_is_omap54xx() || \
|
||||
soc_is_am33xx())
|
||||
|
||||
/* Various silicon revisions for omap2 */
|
||||
#define OMAP242X_CLASS 0x24200024
|
||||
#define OMAP2420_REV_ES1_0 OMAP242X_CLASS
|
||||
#define OMAP2420_REV_ES2_0 (OMAP242X_CLASS | (0x1 << 8))
|
||||
|
||||
#define OMAP243X_CLASS 0x24300024
|
||||
#define OMAP2430_REV_ES1_0 OMAP243X_CLASS
|
||||
|
||||
#define OMAP343X_CLASS 0x34300034
|
||||
#define OMAP3430_REV_ES1_0 OMAP343X_CLASS
|
||||
#define OMAP3430_REV_ES2_0 (OMAP343X_CLASS | (0x1 << 8))
|
||||
#define OMAP3430_REV_ES2_1 (OMAP343X_CLASS | (0x2 << 8))
|
||||
#define OMAP3430_REV_ES3_0 (OMAP343X_CLASS | (0x3 << 8))
|
||||
#define OMAP3430_REV_ES3_1 (OMAP343X_CLASS | (0x4 << 8))
|
||||
#define OMAP3430_REV_ES3_1_2 (OMAP343X_CLASS | (0x5 << 8))
|
||||
|
||||
#define OMAP363X_CLASS 0x36300034
|
||||
#define OMAP3630_REV_ES1_0 OMAP363X_CLASS
|
||||
#define OMAP3630_REV_ES1_1 (OMAP363X_CLASS | (0x1 << 8))
|
||||
#define OMAP3630_REV_ES1_2 (OMAP363X_CLASS | (0x2 << 8))
|
||||
|
||||
#define TI816X_CLASS 0x81600034
|
||||
#define TI8168_REV_ES1_0 TI816X_CLASS
|
||||
#define TI8168_REV_ES1_1 (TI816X_CLASS | (0x1 << 8))
|
||||
|
||||
#define TI814X_CLASS 0x81400034
|
||||
#define TI8148_REV_ES1_0 TI814X_CLASS
|
||||
#define TI8148_REV_ES2_0 (TI814X_CLASS | (0x1 << 8))
|
||||
#define TI8148_REV_ES2_1 (TI814X_CLASS | (0x2 << 8))
|
||||
|
||||
#define AM35XX_CLASS 0x35170034
|
||||
#define AM35XX_REV_ES1_0 AM35XX_CLASS
|
||||
#define AM35XX_REV_ES1_1 (AM35XX_CLASS | (0x1 << 8))
|
||||
|
||||
#define AM335X_CLASS 0x33500033
|
||||
#define AM335X_REV_ES1_0 AM335X_CLASS
|
||||
|
||||
#define OMAP443X_CLASS 0x44300044
|
||||
#define OMAP4430_REV_ES1_0 (OMAP443X_CLASS | (0x10 << 8))
|
||||
#define OMAP4430_REV_ES2_0 (OMAP443X_CLASS | (0x20 << 8))
|
||||
#define OMAP4430_REV_ES2_1 (OMAP443X_CLASS | (0x21 << 8))
|
||||
#define OMAP4430_REV_ES2_2 (OMAP443X_CLASS | (0x22 << 8))
|
||||
#define OMAP4430_REV_ES2_3 (OMAP443X_CLASS | (0x23 << 8))
|
||||
|
||||
#define OMAP446X_CLASS 0x44600044
|
||||
#define OMAP4460_REV_ES1_0 (OMAP446X_CLASS | (0x10 << 8))
|
||||
#define OMAP4460_REV_ES1_1 (OMAP446X_CLASS | (0x11 << 8))
|
||||
|
||||
#define OMAP447X_CLASS 0x44700044
|
||||
#define OMAP4470_REV_ES1_0 (OMAP447X_CLASS | (0x10 << 8))
|
||||
|
||||
#define OMAP54XX_CLASS 0x54000054
|
||||
#define OMAP5430_REV_ES1_0 (OMAP54XX_CLASS | (0x30 << 16) | (0x10 << 8))
|
||||
#define OMAP5432_REV_ES1_0 (OMAP54XX_CLASS | (0x32 << 16) | (0x10 << 8))
|
||||
|
||||
void omap2xxx_check_revision(void);
|
||||
void omap3xxx_check_revision(void);
|
||||
void omap4xxx_check_revision(void);
|
||||
void omap5xxx_check_revision(void);
|
||||
void omap3xxx_check_features(void);
|
||||
void ti81xx_check_features(void);
|
||||
void omap4xxx_check_features(void);
|
||||
|
||||
/*
|
||||
* Runtime detection of OMAP3 features
|
||||
*
|
||||
* OMAP3_HAS_IO_CHAIN_CTRL: Some later members of the OMAP3 chip
|
||||
* family have OS-level control over the I/O chain clock. This is
|
||||
* to avoid a window during which wakeups could potentially be lost
|
||||
* during powerdomain transitions. If this bit is set, it
|
||||
* indicates that the chip does support OS-level control of this
|
||||
* feature.
|
||||
*/
|
||||
extern u32 omap_features;
|
||||
|
||||
#define OMAP3_HAS_L2CACHE BIT(0)
|
||||
#define OMAP3_HAS_IVA BIT(1)
|
||||
#define OMAP3_HAS_SGX BIT(2)
|
||||
#define OMAP3_HAS_NEON BIT(3)
|
||||
#define OMAP3_HAS_ISP BIT(4)
|
||||
#define OMAP3_HAS_192MHZ_CLK BIT(5)
|
||||
#define OMAP3_HAS_IO_WAKEUP BIT(6)
|
||||
#define OMAP3_HAS_SDRC BIT(7)
|
||||
#define OMAP3_HAS_IO_CHAIN_CTRL BIT(8)
|
||||
#define OMAP4_HAS_MPU_1GHZ BIT(9)
|
||||
#define OMAP4_HAS_MPU_1_2GHZ BIT(10)
|
||||
#define OMAP4_HAS_MPU_1_5GHZ BIT(11)
|
||||
|
||||
|
||||
#define OMAP3_HAS_FEATURE(feat,flag) \
|
||||
static inline unsigned int omap3_has_ ##feat(void) \
|
||||
{ \
|
||||
return omap_features & OMAP3_HAS_ ##flag; \
|
||||
} \
|
||||
|
||||
OMAP3_HAS_FEATURE(l2cache, L2CACHE)
|
||||
OMAP3_HAS_FEATURE(sgx, SGX)
|
||||
OMAP3_HAS_FEATURE(iva, IVA)
|
||||
OMAP3_HAS_FEATURE(neon, NEON)
|
||||
OMAP3_HAS_FEATURE(isp, ISP)
|
||||
OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK)
|
||||
OMAP3_HAS_FEATURE(io_wakeup, IO_WAKEUP)
|
||||
OMAP3_HAS_FEATURE(sdrc, SDRC)
|
||||
OMAP3_HAS_FEATURE(io_chain_ctrl, IO_CHAIN_CTRL)
|
||||
|
||||
/*
|
||||
* Runtime detection of OMAP4 features
|
||||
*/
|
||||
#define OMAP4_HAS_FEATURE(feat, flag) \
|
||||
static inline unsigned int omap4_has_ ##feat(void) \
|
||||
{ \
|
||||
return omap_features & OMAP4_HAS_ ##flag; \
|
||||
} \
|
||||
|
||||
OMAP4_HAS_FEATURE(mpu_1ghz, MPU_1GHZ)
|
||||
OMAP4_HAS_FEATURE(mpu_1_2ghz, MPU_1_2GHZ)
|
||||
OMAP4_HAS_FEATURE(mpu_1_5ghz, MPU_1_5GHZ)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif
|
||||
|
2
arch/arm/plat-omap/include/plat/debug-devices.h
Normal file
2
arch/arm/plat-omap/include/plat/debug-devices.h
Normal file
@@ -0,0 +1,2 @@
|
||||
/* for TI reference platforms sharing the same debug card */
|
||||
extern int debug_card_init(u32 addr, unsigned gpio);
|
@@ -1,147 +0,0 @@
|
||||
/*
|
||||
* OMAP4 SDMA channel definitions
|
||||
*
|
||||
* Copyright (C) 2009-2010 Texas Instruments, Inc.
|
||||
* Copyright (C) 2009-2010 Nokia Corporation
|
||||
*
|
||||
* Santosh Shilimkar (santosh.shilimkar@ti.com)
|
||||
* Benoit Cousson (b-cousson@ti.com)
|
||||
* Paul Walmsley (paul@pwsan.com)
|
||||
*
|
||||
* This file is automatically generated from the OMAP hardware databases.
|
||||
* We respectfully ask that any modifications to this file be coordinated
|
||||
* with the public linux-omap@vger.kernel.org mailing list and the
|
||||
* authors above to ensure that the autogeneration scripts are kept
|
||||
* up-to-date with the file contents.
|
||||
*
|
||||
* 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 __ARCH_ARM_MACH_OMAP2_OMAP44XX_DMA_H
|
||||
#define __ARCH_ARM_MACH_OMAP2_OMAP44XX_DMA_H
|
||||
|
||||
#define OMAP44XX_DMA_SYS_REQ0 2
|
||||
#define OMAP44XX_DMA_SYS_REQ1 3
|
||||
#define OMAP44XX_DMA_GPMC 4
|
||||
#define OMAP44XX_DMA_DSS_DISPC_REQ 6
|
||||
#define OMAP44XX_DMA_SYS_REQ2 7
|
||||
#define OMAP44XX_DMA_MCASP1_AXEVT 8
|
||||
#define OMAP44XX_DMA_ISS_REQ1 9
|
||||
#define OMAP44XX_DMA_ISS_REQ2 10
|
||||
#define OMAP44XX_DMA_MCASP1_AREVT 11
|
||||
#define OMAP44XX_DMA_ISS_REQ3 12
|
||||
#define OMAP44XX_DMA_ISS_REQ4 13
|
||||
#define OMAP44XX_DMA_DSS_RFBI_REQ 14
|
||||
#define OMAP44XX_DMA_SPI3_TX0 15
|
||||
#define OMAP44XX_DMA_SPI3_RX0 16
|
||||
#define OMAP44XX_DMA_MCBSP2_TX 17
|
||||
#define OMAP44XX_DMA_MCBSP2_RX 18
|
||||
#define OMAP44XX_DMA_MCBSP3_TX 19
|
||||
#define OMAP44XX_DMA_MCBSP3_RX 20
|
||||
#define OMAP44XX_DMA_C2C_SSCM_GPO0 21
|
||||
#define OMAP44XX_DMA_C2C_SSCM_GPO1 22
|
||||
#define OMAP44XX_DMA_SPI3_TX1 23
|
||||
#define OMAP44XX_DMA_SPI3_RX1 24
|
||||
#define OMAP44XX_DMA_I2C3_TX 25
|
||||
#define OMAP44XX_DMA_I2C3_RX 26
|
||||
#define OMAP44XX_DMA_I2C1_TX 27
|
||||
#define OMAP44XX_DMA_I2C1_RX 28
|
||||
#define OMAP44XX_DMA_I2C2_TX 29
|
||||
#define OMAP44XX_DMA_I2C2_RX 30
|
||||
#define OMAP44XX_DMA_MCBSP4_TX 31
|
||||
#define OMAP44XX_DMA_MCBSP4_RX 32
|
||||
#define OMAP44XX_DMA_MCBSP1_TX 33
|
||||
#define OMAP44XX_DMA_MCBSP1_RX 34
|
||||
#define OMAP44XX_DMA_SPI1_TX0 35
|
||||
#define OMAP44XX_DMA_SPI1_RX0 36
|
||||
#define OMAP44XX_DMA_SPI1_TX1 37
|
||||
#define OMAP44XX_DMA_SPI1_RX1 38
|
||||
#define OMAP44XX_DMA_SPI1_TX2 39
|
||||
#define OMAP44XX_DMA_SPI1_RX2 40
|
||||
#define OMAP44XX_DMA_SPI1_TX3 41
|
||||
#define OMAP44XX_DMA_SPI1_RX3 42
|
||||
#define OMAP44XX_DMA_SPI2_TX0 43
|
||||
#define OMAP44XX_DMA_SPI2_RX0 44
|
||||
#define OMAP44XX_DMA_SPI2_TX1 45
|
||||
#define OMAP44XX_DMA_SPI2_RX1 46
|
||||
#define OMAP44XX_DMA_MMC2_TX 47
|
||||
#define OMAP44XX_DMA_MMC2_RX 48
|
||||
#define OMAP44XX_DMA_UART1_TX 49
|
||||
#define OMAP44XX_DMA_UART1_RX 50
|
||||
#define OMAP44XX_DMA_UART2_TX 51
|
||||
#define OMAP44XX_DMA_UART2_RX 52
|
||||
#define OMAP44XX_DMA_UART3_TX 53
|
||||
#define OMAP44XX_DMA_UART3_RX 54
|
||||
#define OMAP44XX_DMA_UART4_TX 55
|
||||
#define OMAP44XX_DMA_UART4_RX 56
|
||||
#define OMAP44XX_DMA_MMC4_TX 57
|
||||
#define OMAP44XX_DMA_MMC4_RX 58
|
||||
#define OMAP44XX_DMA_MMC5_TX 59
|
||||
#define OMAP44XX_DMA_MMC5_RX 60
|
||||
#define OMAP44XX_DMA_MMC1_TX 61
|
||||
#define OMAP44XX_DMA_MMC1_RX 62
|
||||
#define OMAP44XX_DMA_SYS_REQ3 64
|
||||
#define OMAP44XX_DMA_MCPDM_UP 65
|
||||
#define OMAP44XX_DMA_MCPDM_DL 66
|
||||
#define OMAP44XX_DMA_DMIC_REQ 67
|
||||
#define OMAP44XX_DMA_C2C_SSCM_GPO2 68
|
||||
#define OMAP44XX_DMA_C2C_SSCM_GPO3 69
|
||||
#define OMAP44XX_DMA_SPI4_TX0 70
|
||||
#define OMAP44XX_DMA_SPI4_RX0 71
|
||||
#define OMAP44XX_DMA_DSS_DSI1_REQ0 72
|
||||
#define OMAP44XX_DMA_DSS_DSI1_REQ1 73
|
||||
#define OMAP44XX_DMA_DSS_DSI1_REQ2 74
|
||||
#define OMAP44XX_DMA_DSS_DSI1_REQ3 75
|
||||
#define OMAP44XX_DMA_DSS_HDMI_REQ 76
|
||||
#define OMAP44XX_DMA_MMC3_TX 77
|
||||
#define OMAP44XX_DMA_MMC3_RX 78
|
||||
#define OMAP44XX_DMA_USIM_TX 79
|
||||
#define OMAP44XX_DMA_USIM_RX 80
|
||||
#define OMAP44XX_DMA_DSS_DSI2_REQ0 81
|
||||
#define OMAP44XX_DMA_DSS_DSI2_REQ1 82
|
||||
#define OMAP44XX_DMA_DSS_DSI2_REQ2 83
|
||||
#define OMAP44XX_DMA_DSS_DSI2_REQ3 84
|
||||
#define OMAP44XX_DMA_SLIMBUS1_TX0 85
|
||||
#define OMAP44XX_DMA_SLIMBUS1_TX1 86
|
||||
#define OMAP44XX_DMA_SLIMBUS1_TX2 87
|
||||
#define OMAP44XX_DMA_SLIMBUS1_TX3 88
|
||||
#define OMAP44XX_DMA_SLIMBUS1_RX0 89
|
||||
#define OMAP44XX_DMA_SLIMBUS1_RX1 90
|
||||
#define OMAP44XX_DMA_SLIMBUS1_RX2 91
|
||||
#define OMAP44XX_DMA_SLIMBUS1_RX3 92
|
||||
#define OMAP44XX_DMA_SLIMBUS2_TX0 93
|
||||
#define OMAP44XX_DMA_SLIMBUS2_TX1 94
|
||||
#define OMAP44XX_DMA_SLIMBUS2_TX2 95
|
||||
#define OMAP44XX_DMA_SLIMBUS2_TX3 96
|
||||
#define OMAP44XX_DMA_SLIMBUS2_RX0 97
|
||||
#define OMAP44XX_DMA_SLIMBUS2_RX1 98
|
||||
#define OMAP44XX_DMA_SLIMBUS2_RX2 99
|
||||
#define OMAP44XX_DMA_SLIMBUS2_RX3 100
|
||||
#define OMAP44XX_DMA_ABE_REQ_0 101
|
||||
#define OMAP44XX_DMA_ABE_REQ_1 102
|
||||
#define OMAP44XX_DMA_ABE_REQ_2 103
|
||||
#define OMAP44XX_DMA_ABE_REQ_3 104
|
||||
#define OMAP44XX_DMA_ABE_REQ_4 105
|
||||
#define OMAP44XX_DMA_ABE_REQ_5 106
|
||||
#define OMAP44XX_DMA_ABE_REQ_6 107
|
||||
#define OMAP44XX_DMA_ABE_REQ_7 108
|
||||
#define OMAP44XX_DMA_AES1_P_CTX_IN_REQ 109
|
||||
#define OMAP44XX_DMA_AES1_P_DATA_IN_REQ 110
|
||||
#define OMAP44XX_DMA_AES1_P_DATA_OUT_REQ 111
|
||||
#define OMAP44XX_DMA_AES2_P_CTX_IN_REQ 112
|
||||
#define OMAP44XX_DMA_AES2_P_DATA_IN_REQ 113
|
||||
#define OMAP44XX_DMA_AES2_P_DATA_OUT_REQ 114
|
||||
#define OMAP44XX_DMA_DES_P_CTX_IN_REQ 115
|
||||
#define OMAP44XX_DMA_DES_P_DATA_IN_REQ 116
|
||||
#define OMAP44XX_DMA_DES_P_DATA_OUT_REQ 117
|
||||
#define OMAP44XX_DMA_SHA2_CTXIN_P 118
|
||||
#define OMAP44XX_DMA_SHA2_DIN_P 119
|
||||
#define OMAP44XX_DMA_SHA2_CTXOUT_P 120
|
||||
#define OMAP44XX_DMA_AES1_P_CONTEXT_OUT_REQ 121
|
||||
#define OMAP44XX_DMA_AES2_P_CONTEXT_OUT_REQ 122
|
||||
#define OMAP44XX_DMA_I2C4_TX 124
|
||||
#define OMAP44XX_DMA_I2C4_RX 125
|
||||
|
||||
#endif
|
@@ -1,546 +0,0 @@
|
||||
/*
|
||||
* arch/arm/plat-omap/include/mach/dma.h
|
||||
*
|
||||
* Copyright (C) 2003 Nokia Corporation
|
||||
* Author: Juha Yrjölä <juha.yrjola@nokia.com>
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef __ASM_ARCH_DMA_H
|
||||
#define __ASM_ARCH_DMA_H
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
/*
|
||||
* TODO: These dma channel defines should go away once all
|
||||
* the omap drivers hwmod adapted.
|
||||
*/
|
||||
|
||||
/* Move omap4 specific defines to dma-44xx.h */
|
||||
#include "dma-44xx.h"
|
||||
|
||||
#define INT_DMA_LCD 25
|
||||
|
||||
/* DMA channels for omap1 */
|
||||
#define OMAP_DMA_NO_DEVICE 0
|
||||
#define OMAP_DMA_MCSI1_TX 1
|
||||
#define OMAP_DMA_MCSI1_RX 2
|
||||
#define OMAP_DMA_I2C_RX 3
|
||||
#define OMAP_DMA_I2C_TX 4
|
||||
#define OMAP_DMA_EXT_NDMA_REQ 5
|
||||
#define OMAP_DMA_EXT_NDMA_REQ2 6
|
||||
#define OMAP_DMA_UWIRE_TX 7
|
||||
#define OMAP_DMA_MCBSP1_TX 8
|
||||
#define OMAP_DMA_MCBSP1_RX 9
|
||||
#define OMAP_DMA_MCBSP3_TX 10
|
||||
#define OMAP_DMA_MCBSP3_RX 11
|
||||
#define OMAP_DMA_UART1_TX 12
|
||||
#define OMAP_DMA_UART1_RX 13
|
||||
#define OMAP_DMA_UART2_TX 14
|
||||
#define OMAP_DMA_UART2_RX 15
|
||||
#define OMAP_DMA_MCBSP2_TX 16
|
||||
#define OMAP_DMA_MCBSP2_RX 17
|
||||
#define OMAP_DMA_UART3_TX 18
|
||||
#define OMAP_DMA_UART3_RX 19
|
||||
#define OMAP_DMA_CAMERA_IF_RX 20
|
||||
#define OMAP_DMA_MMC_TX 21
|
||||
#define OMAP_DMA_MMC_RX 22
|
||||
#define OMAP_DMA_NAND 23
|
||||
#define OMAP_DMA_IRQ_LCD_LINE 24
|
||||
#define OMAP_DMA_MEMORY_STICK 25
|
||||
#define OMAP_DMA_USB_W2FC_RX0 26
|
||||
#define OMAP_DMA_USB_W2FC_RX1 27
|
||||
#define OMAP_DMA_USB_W2FC_RX2 28
|
||||
#define OMAP_DMA_USB_W2FC_TX0 29
|
||||
#define OMAP_DMA_USB_W2FC_TX1 30
|
||||
#define OMAP_DMA_USB_W2FC_TX2 31
|
||||
|
||||
/* These are only for 1610 */
|
||||
#define OMAP_DMA_CRYPTO_DES_IN 32
|
||||
#define OMAP_DMA_SPI_TX 33
|
||||
#define OMAP_DMA_SPI_RX 34
|
||||
#define OMAP_DMA_CRYPTO_HASH 35
|
||||
#define OMAP_DMA_CCP_ATTN 36
|
||||
#define OMAP_DMA_CCP_FIFO_NOT_EMPTY 37
|
||||
#define OMAP_DMA_CMT_APE_TX_CHAN_0 38
|
||||
#define OMAP_DMA_CMT_APE_RV_CHAN_0 39
|
||||
#define OMAP_DMA_CMT_APE_TX_CHAN_1 40
|
||||
#define OMAP_DMA_CMT_APE_RV_CHAN_1 41
|
||||
#define OMAP_DMA_CMT_APE_TX_CHAN_2 42
|
||||
#define OMAP_DMA_CMT_APE_RV_CHAN_2 43
|
||||
#define OMAP_DMA_CMT_APE_TX_CHAN_3 44
|
||||
#define OMAP_DMA_CMT_APE_RV_CHAN_3 45
|
||||
#define OMAP_DMA_CMT_APE_TX_CHAN_4 46
|
||||
#define OMAP_DMA_CMT_APE_RV_CHAN_4 47
|
||||
#define OMAP_DMA_CMT_APE_TX_CHAN_5 48
|
||||
#define OMAP_DMA_CMT_APE_RV_CHAN_5 49
|
||||
#define OMAP_DMA_CMT_APE_TX_CHAN_6 50
|
||||
#define OMAP_DMA_CMT_APE_RV_CHAN_6 51
|
||||
#define OMAP_DMA_CMT_APE_TX_CHAN_7 52
|
||||
#define OMAP_DMA_CMT_APE_RV_CHAN_7 53
|
||||
#define OMAP_DMA_MMC2_TX 54
|
||||
#define OMAP_DMA_MMC2_RX 55
|
||||
#define OMAP_DMA_CRYPTO_DES_OUT 56
|
||||
|
||||
/* DMA channels for 24xx */
|
||||
#define OMAP24XX_DMA_NO_DEVICE 0
|
||||
#define OMAP24XX_DMA_XTI_DMA 1 /* S_DMA_0 */
|
||||
#define OMAP24XX_DMA_EXT_DMAREQ0 2 /* S_DMA_1 */
|
||||
#define OMAP24XX_DMA_EXT_DMAREQ1 3 /* S_DMA_2 */
|
||||
#define OMAP24XX_DMA_GPMC 4 /* S_DMA_3 */
|
||||
#define OMAP24XX_DMA_GFX 5 /* S_DMA_4 */
|
||||
#define OMAP24XX_DMA_DSS 6 /* S_DMA_5 */
|
||||
#define OMAP242X_DMA_VLYNQ_TX 7 /* S_DMA_6 */
|
||||
#define OMAP24XX_DMA_EXT_DMAREQ2 7 /* S_DMA_6 */
|
||||
#define OMAP24XX_DMA_CWT 8 /* S_DMA_7 */
|
||||
#define OMAP24XX_DMA_AES_TX 9 /* S_DMA_8 */
|
||||
#define OMAP24XX_DMA_AES_RX 10 /* S_DMA_9 */
|
||||
#define OMAP24XX_DMA_DES_TX 11 /* S_DMA_10 */
|
||||
#define OMAP24XX_DMA_DES_RX 12 /* S_DMA_11 */
|
||||
#define OMAP24XX_DMA_SHA1MD5_RX 13 /* S_DMA_12 */
|
||||
#define OMAP34XX_DMA_SHA2MD5_RX 13 /* S_DMA_12 */
|
||||
#define OMAP242X_DMA_EXT_DMAREQ2 14 /* S_DMA_13 */
|
||||
#define OMAP242X_DMA_EXT_DMAREQ3 15 /* S_DMA_14 */
|
||||
#define OMAP242X_DMA_EXT_DMAREQ4 16 /* S_DMA_15 */
|
||||
#define OMAP242X_DMA_EAC_AC_RD 17 /* S_DMA_16 */
|
||||
#define OMAP242X_DMA_EAC_AC_WR 18 /* S_DMA_17 */
|
||||
#define OMAP242X_DMA_EAC_MD_UL_RD 19 /* S_DMA_18 */
|
||||
#define OMAP242X_DMA_EAC_MD_UL_WR 20 /* S_DMA_19 */
|
||||
#define OMAP242X_DMA_EAC_MD_DL_RD 21 /* S_DMA_20 */
|
||||
#define OMAP242X_DMA_EAC_MD_DL_WR 22 /* S_DMA_21 */
|
||||
#define OMAP242X_DMA_EAC_BT_UL_RD 23 /* S_DMA_22 */
|
||||
#define OMAP242X_DMA_EAC_BT_UL_WR 24 /* S_DMA_23 */
|
||||
#define OMAP242X_DMA_EAC_BT_DL_RD 25 /* S_DMA_24 */
|
||||
#define OMAP242X_DMA_EAC_BT_DL_WR 26 /* S_DMA_25 */
|
||||
#define OMAP243X_DMA_EXT_DMAREQ3 14 /* S_DMA_13 */
|
||||
#define OMAP24XX_DMA_SPI3_TX0 15 /* S_DMA_14 */
|
||||
#define OMAP24XX_DMA_SPI3_RX0 16 /* S_DMA_15 */
|
||||
#define OMAP24XX_DMA_MCBSP3_TX 17 /* S_DMA_16 */
|
||||
#define OMAP24XX_DMA_MCBSP3_RX 18 /* S_DMA_17 */
|
||||
#define OMAP24XX_DMA_MCBSP4_TX 19 /* S_DMA_18 */
|
||||
#define OMAP24XX_DMA_MCBSP4_RX 20 /* S_DMA_19 */
|
||||
#define OMAP24XX_DMA_MCBSP5_TX 21 /* S_DMA_20 */
|
||||
#define OMAP24XX_DMA_MCBSP5_RX 22 /* S_DMA_21 */
|
||||
#define OMAP24XX_DMA_SPI3_TX1 23 /* S_DMA_22 */
|
||||
#define OMAP24XX_DMA_SPI3_RX1 24 /* S_DMA_23 */
|
||||
#define OMAP243X_DMA_EXT_DMAREQ4 25 /* S_DMA_24 */
|
||||
#define OMAP243X_DMA_EXT_DMAREQ5 26 /* S_DMA_25 */
|
||||
#define OMAP34XX_DMA_I2C3_TX 25 /* S_DMA_24 */
|
||||
#define OMAP34XX_DMA_I2C3_RX 26 /* S_DMA_25 */
|
||||
#define OMAP24XX_DMA_I2C1_TX 27 /* S_DMA_26 */
|
||||
#define OMAP24XX_DMA_I2C1_RX 28 /* S_DMA_27 */
|
||||
#define OMAP24XX_DMA_I2C2_TX 29 /* S_DMA_28 */
|
||||
#define OMAP24XX_DMA_I2C2_RX 30 /* S_DMA_29 */
|
||||
#define OMAP24XX_DMA_MCBSP1_TX 31 /* S_DMA_30 */
|
||||
#define OMAP24XX_DMA_MCBSP1_RX 32 /* S_DMA_31 */
|
||||
#define OMAP24XX_DMA_MCBSP2_TX 33 /* S_DMA_32 */
|
||||
#define OMAP24XX_DMA_MCBSP2_RX 34 /* S_DMA_33 */
|
||||
#define OMAP24XX_DMA_SPI1_TX0 35 /* S_DMA_34 */
|
||||
#define OMAP24XX_DMA_SPI1_RX0 36 /* S_DMA_35 */
|
||||
#define OMAP24XX_DMA_SPI1_TX1 37 /* S_DMA_36 */
|
||||
#define OMAP24XX_DMA_SPI1_RX1 38 /* S_DMA_37 */
|
||||
#define OMAP24XX_DMA_SPI1_TX2 39 /* S_DMA_38 */
|
||||
#define OMAP24XX_DMA_SPI1_RX2 40 /* S_DMA_39 */
|
||||
#define OMAP24XX_DMA_SPI1_TX3 41 /* S_DMA_40 */
|
||||
#define OMAP24XX_DMA_SPI1_RX3 42 /* S_DMA_41 */
|
||||
#define OMAP24XX_DMA_SPI2_TX0 43 /* S_DMA_42 */
|
||||
#define OMAP24XX_DMA_SPI2_RX0 44 /* S_DMA_43 */
|
||||
#define OMAP24XX_DMA_SPI2_TX1 45 /* S_DMA_44 */
|
||||
#define OMAP24XX_DMA_SPI2_RX1 46 /* S_DMA_45 */
|
||||
#define OMAP24XX_DMA_MMC2_TX 47 /* S_DMA_46 */
|
||||
#define OMAP24XX_DMA_MMC2_RX 48 /* S_DMA_47 */
|
||||
#define OMAP24XX_DMA_UART1_TX 49 /* S_DMA_48 */
|
||||
#define OMAP24XX_DMA_UART1_RX 50 /* S_DMA_49 */
|
||||
#define OMAP24XX_DMA_UART2_TX 51 /* S_DMA_50 */
|
||||
#define OMAP24XX_DMA_UART2_RX 52 /* S_DMA_51 */
|
||||
#define OMAP24XX_DMA_UART3_TX 53 /* S_DMA_52 */
|
||||
#define OMAP24XX_DMA_UART3_RX 54 /* S_DMA_53 */
|
||||
#define OMAP24XX_DMA_USB_W2FC_TX0 55 /* S_DMA_54 */
|
||||
#define OMAP24XX_DMA_USB_W2FC_RX0 56 /* S_DMA_55 */
|
||||
#define OMAP24XX_DMA_USB_W2FC_TX1 57 /* S_DMA_56 */
|
||||
#define OMAP24XX_DMA_USB_W2FC_RX1 58 /* S_DMA_57 */
|
||||
#define OMAP24XX_DMA_USB_W2FC_TX2 59 /* S_DMA_58 */
|
||||
#define OMAP24XX_DMA_USB_W2FC_RX2 60 /* S_DMA_59 */
|
||||
#define OMAP24XX_DMA_MMC1_TX 61 /* S_DMA_60 */
|
||||
#define OMAP24XX_DMA_MMC1_RX 62 /* S_DMA_61 */
|
||||
#define OMAP24XX_DMA_MS 63 /* S_DMA_62 */
|
||||
#define OMAP242X_DMA_EXT_DMAREQ5 64 /* S_DMA_63 */
|
||||
#define OMAP243X_DMA_EXT_DMAREQ6 64 /* S_DMA_63 */
|
||||
#define OMAP34XX_DMA_EXT_DMAREQ3 64 /* S_DMA_63 */
|
||||
#define OMAP34XX_DMA_AES2_TX 65 /* S_DMA_64 */
|
||||
#define OMAP34XX_DMA_AES2_RX 66 /* S_DMA_65 */
|
||||
#define OMAP34XX_DMA_DES2_TX 67 /* S_DMA_66 */
|
||||
#define OMAP34XX_DMA_DES2_RX 68 /* S_DMA_67 */
|
||||
#define OMAP34XX_DMA_SHA1MD5_RX 69 /* S_DMA_68 */
|
||||
#define OMAP34XX_DMA_SPI4_TX0 70 /* S_DMA_69 */
|
||||
#define OMAP34XX_DMA_SPI4_RX0 71 /* S_DMA_70 */
|
||||
#define OMAP34XX_DSS_DMA0 72 /* S_DMA_71 */
|
||||
#define OMAP34XX_DSS_DMA1 73 /* S_DMA_72 */
|
||||
#define OMAP34XX_DSS_DMA2 74 /* S_DMA_73 */
|
||||
#define OMAP34XX_DSS_DMA3 75 /* S_DMA_74 */
|
||||
#define OMAP34XX_DMA_MMC3_TX 77 /* S_DMA_76 */
|
||||
#define OMAP34XX_DMA_MMC3_RX 78 /* S_DMA_77 */
|
||||
#define OMAP34XX_DMA_USIM_TX 79 /* S_DMA_78 */
|
||||
#define OMAP34XX_DMA_USIM_RX 80 /* S_DMA_79 */
|
||||
|
||||
#define OMAP36XX_DMA_UART4_TX 81 /* S_DMA_80 */
|
||||
#define OMAP36XX_DMA_UART4_RX 82 /* S_DMA_81 */
|
||||
|
||||
/* Only for AM35xx */
|
||||
#define AM35XX_DMA_UART4_TX 54
|
||||
#define AM35XX_DMA_UART4_RX 55
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#define OMAP1_DMA_TOUT_IRQ (1 << 0)
|
||||
#define OMAP_DMA_DROP_IRQ (1 << 1)
|
||||
#define OMAP_DMA_HALF_IRQ (1 << 2)
|
||||
#define OMAP_DMA_FRAME_IRQ (1 << 3)
|
||||
#define OMAP_DMA_LAST_IRQ (1 << 4)
|
||||
#define OMAP_DMA_BLOCK_IRQ (1 << 5)
|
||||
#define OMAP1_DMA_SYNC_IRQ (1 << 6)
|
||||
#define OMAP2_DMA_PKT_IRQ (1 << 7)
|
||||
#define OMAP2_DMA_TRANS_ERR_IRQ (1 << 8)
|
||||
#define OMAP2_DMA_SECURE_ERR_IRQ (1 << 9)
|
||||
#define OMAP2_DMA_SUPERVISOR_ERR_IRQ (1 << 10)
|
||||
#define OMAP2_DMA_MISALIGNED_ERR_IRQ (1 << 11)
|
||||
|
||||
#define OMAP_DMA_CCR_EN (1 << 7)
|
||||
#define OMAP_DMA_CCR_RD_ACTIVE (1 << 9)
|
||||
#define OMAP_DMA_CCR_WR_ACTIVE (1 << 10)
|
||||
#define OMAP_DMA_CCR_SEL_SRC_DST_SYNC (1 << 24)
|
||||
#define OMAP_DMA_CCR_BUFFERING_DISABLE (1 << 25)
|
||||
|
||||
#define OMAP_DMA_DATA_TYPE_S8 0x00
|
||||
#define OMAP_DMA_DATA_TYPE_S16 0x01
|
||||
#define OMAP_DMA_DATA_TYPE_S32 0x02
|
||||
|
||||
#define OMAP_DMA_SYNC_ELEMENT 0x00
|
||||
#define OMAP_DMA_SYNC_FRAME 0x01
|
||||
#define OMAP_DMA_SYNC_BLOCK 0x02
|
||||
#define OMAP_DMA_SYNC_PACKET 0x03
|
||||
|
||||
#define OMAP_DMA_DST_SYNC_PREFETCH 0x02
|
||||
#define OMAP_DMA_SRC_SYNC 0x01
|
||||
#define OMAP_DMA_DST_SYNC 0x00
|
||||
|
||||
#define OMAP_DMA_PORT_EMIFF 0x00
|
||||
#define OMAP_DMA_PORT_EMIFS 0x01
|
||||
#define OMAP_DMA_PORT_OCP_T1 0x02
|
||||
#define OMAP_DMA_PORT_TIPB 0x03
|
||||
#define OMAP_DMA_PORT_OCP_T2 0x04
|
||||
#define OMAP_DMA_PORT_MPUI 0x05
|
||||
|
||||
#define OMAP_DMA_AMODE_CONSTANT 0x00
|
||||
#define OMAP_DMA_AMODE_POST_INC 0x01
|
||||
#define OMAP_DMA_AMODE_SINGLE_IDX 0x02
|
||||
#define OMAP_DMA_AMODE_DOUBLE_IDX 0x03
|
||||
|
||||
#define DMA_DEFAULT_FIFO_DEPTH 0x10
|
||||
#define DMA_DEFAULT_ARB_RATE 0x01
|
||||
/* Pass THREAD_RESERVE ORed with THREAD_FIFO for tparams */
|
||||
#define DMA_THREAD_RESERVE_NORM (0x00 << 12) /* Def */
|
||||
#define DMA_THREAD_RESERVE_ONET (0x01 << 12)
|
||||
#define DMA_THREAD_RESERVE_TWOT (0x02 << 12)
|
||||
#define DMA_THREAD_RESERVE_THREET (0x03 << 12)
|
||||
#define DMA_THREAD_FIFO_NONE (0x00 << 14) /* Def */
|
||||
#define DMA_THREAD_FIFO_75 (0x01 << 14)
|
||||
#define DMA_THREAD_FIFO_25 (0x02 << 14)
|
||||
#define DMA_THREAD_FIFO_50 (0x03 << 14)
|
||||
|
||||
/* DMA4_OCP_SYSCONFIG bits */
|
||||
#define DMA_SYSCONFIG_MIDLEMODE_MASK (3 << 12)
|
||||
#define DMA_SYSCONFIG_CLOCKACTIVITY_MASK (3 << 8)
|
||||
#define DMA_SYSCONFIG_EMUFREE (1 << 5)
|
||||
#define DMA_SYSCONFIG_SIDLEMODE_MASK (3 << 3)
|
||||
#define DMA_SYSCONFIG_SOFTRESET (1 << 2)
|
||||
#define DMA_SYSCONFIG_AUTOIDLE (1 << 0)
|
||||
|
||||
#define DMA_SYSCONFIG_MIDLEMODE(n) ((n) << 12)
|
||||
#define DMA_SYSCONFIG_SIDLEMODE(n) ((n) << 3)
|
||||
|
||||
#define DMA_IDLEMODE_SMARTIDLE 0x2
|
||||
#define DMA_IDLEMODE_NO_IDLE 0x1
|
||||
#define DMA_IDLEMODE_FORCE_IDLE 0x0
|
||||
|
||||
/* Chaining modes*/
|
||||
#ifndef CONFIG_ARCH_OMAP1
|
||||
#define OMAP_DMA_STATIC_CHAIN 0x1
|
||||
#define OMAP_DMA_DYNAMIC_CHAIN 0x2
|
||||
#define OMAP_DMA_CHAIN_ACTIVE 0x1
|
||||
#define OMAP_DMA_CHAIN_INACTIVE 0x0
|
||||
#endif
|
||||
|
||||
#define DMA_CH_PRIO_HIGH 0x1
|
||||
#define DMA_CH_PRIO_LOW 0x0 /* Def */
|
||||
|
||||
/* Errata handling */
|
||||
#define IS_DMA_ERRATA(id) (errata & (id))
|
||||
#define SET_DMA_ERRATA(id) (errata |= (id))
|
||||
|
||||
#define DMA_ERRATA_IFRAME_BUFFERING BIT(0x0)
|
||||
#define DMA_ERRATA_PARALLEL_CHANNELS BIT(0x1)
|
||||
#define DMA_ERRATA_i378 BIT(0x2)
|
||||
#define DMA_ERRATA_i541 BIT(0x3)
|
||||
#define DMA_ERRATA_i88 BIT(0x4)
|
||||
#define DMA_ERRATA_3_3 BIT(0x5)
|
||||
#define DMA_ROMCODE_BUG BIT(0x6)
|
||||
|
||||
/* Attributes for OMAP DMA Contrller */
|
||||
#define DMA_LINKED_LCH BIT(0x0)
|
||||
#define GLOBAL_PRIORITY BIT(0x1)
|
||||
#define RESERVE_CHANNEL BIT(0x2)
|
||||
#define IS_CSSA_32 BIT(0x3)
|
||||
#define IS_CDSA_32 BIT(0x4)
|
||||
#define IS_RW_PRIORITY BIT(0x5)
|
||||
#define ENABLE_1510_MODE BIT(0x6)
|
||||
#define SRC_PORT BIT(0x7)
|
||||
#define DST_PORT BIT(0x8)
|
||||
#define SRC_INDEX BIT(0x9)
|
||||
#define DST_INDEX BIT(0xA)
|
||||
#define IS_BURST_ONLY4 BIT(0xB)
|
||||
#define CLEAR_CSR_ON_READ BIT(0xC)
|
||||
#define IS_WORD_16 BIT(0xD)
|
||||
|
||||
/* Defines for DMA Capabilities */
|
||||
#define DMA_HAS_TRANSPARENT_CAPS (0x1 << 18)
|
||||
#define DMA_HAS_CONSTANT_FILL_CAPS (0x1 << 19)
|
||||
#define DMA_HAS_DESCRIPTOR_CAPS (0x3 << 20)
|
||||
|
||||
enum omap_reg_offsets {
|
||||
|
||||
GCR, GSCR, GRST1, HW_ID,
|
||||
PCH2_ID, PCH0_ID, PCH1_ID, PCHG_ID,
|
||||
PCHD_ID, CAPS_0, CAPS_1, CAPS_2,
|
||||
CAPS_3, CAPS_4, PCH2_SR, PCH0_SR,
|
||||
PCH1_SR, PCHD_SR, REVISION, IRQSTATUS_L0,
|
||||
IRQSTATUS_L1, IRQSTATUS_L2, IRQSTATUS_L3, IRQENABLE_L0,
|
||||
IRQENABLE_L1, IRQENABLE_L2, IRQENABLE_L3, SYSSTATUS,
|
||||
OCP_SYSCONFIG,
|
||||
|
||||
/* omap1+ specific */
|
||||
CPC, CCR2, LCH_CTRL,
|
||||
|
||||
/* Common registers for all omap's */
|
||||
CSDP, CCR, CICR, CSR,
|
||||
CEN, CFN, CSFI, CSEI,
|
||||
CSAC, CDAC, CDEI,
|
||||
CDFI, CLNK_CTRL,
|
||||
|
||||
/* Channel specific registers */
|
||||
CSSA, CDSA, COLOR,
|
||||
CCEN, CCFN,
|
||||
|
||||
/* omap3630 and omap4 specific */
|
||||
CDP, CNDP, CCDN,
|
||||
|
||||
};
|
||||
|
||||
enum omap_dma_burst_mode {
|
||||
OMAP_DMA_DATA_BURST_DIS = 0,
|
||||
OMAP_DMA_DATA_BURST_4,
|
||||
OMAP_DMA_DATA_BURST_8,
|
||||
OMAP_DMA_DATA_BURST_16,
|
||||
};
|
||||
|
||||
enum end_type {
|
||||
OMAP_DMA_LITTLE_ENDIAN = 0,
|
||||
OMAP_DMA_BIG_ENDIAN
|
||||
};
|
||||
|
||||
enum omap_dma_color_mode {
|
||||
OMAP_DMA_COLOR_DIS = 0,
|
||||
OMAP_DMA_CONSTANT_FILL,
|
||||
OMAP_DMA_TRANSPARENT_COPY
|
||||
};
|
||||
|
||||
enum omap_dma_write_mode {
|
||||
OMAP_DMA_WRITE_NON_POSTED = 0,
|
||||
OMAP_DMA_WRITE_POSTED,
|
||||
OMAP_DMA_WRITE_LAST_NON_POSTED
|
||||
};
|
||||
|
||||
enum omap_dma_channel_mode {
|
||||
OMAP_DMA_LCH_2D = 0,
|
||||
OMAP_DMA_LCH_G,
|
||||
OMAP_DMA_LCH_P,
|
||||
OMAP_DMA_LCH_PD
|
||||
};
|
||||
|
||||
struct omap_dma_channel_params {
|
||||
int data_type; /* data type 8,16,32 */
|
||||
int elem_count; /* number of elements in a frame */
|
||||
int frame_count; /* number of frames in a element */
|
||||
|
||||
int src_port; /* Only on OMAP1 REVISIT: Is this needed? */
|
||||
int src_amode; /* constant, post increment, indexed,
|
||||
double indexed */
|
||||
unsigned long src_start; /* source address : physical */
|
||||
int src_ei; /* source element index */
|
||||
int src_fi; /* source frame index */
|
||||
|
||||
int dst_port; /* Only on OMAP1 REVISIT: Is this needed? */
|
||||
int dst_amode; /* constant, post increment, indexed,
|
||||
double indexed */
|
||||
unsigned long dst_start; /* source address : physical */
|
||||
int dst_ei; /* source element index */
|
||||
int dst_fi; /* source frame index */
|
||||
|
||||
int trigger; /* trigger attached if the channel is
|
||||
synchronized */
|
||||
int sync_mode; /* sycn on element, frame , block or packet */
|
||||
int src_or_dst_synch; /* source synch(1) or destination synch(0) */
|
||||
|
||||
int ie; /* interrupt enabled */
|
||||
|
||||
unsigned char read_prio;/* read priority */
|
||||
unsigned char write_prio;/* write priority */
|
||||
|
||||
#ifndef CONFIG_ARCH_OMAP1
|
||||
enum omap_dma_burst_mode burst_mode; /* Burst mode 4/8/16 words */
|
||||
#endif
|
||||
};
|
||||
|
||||
struct omap_dma_lch {
|
||||
int next_lch;
|
||||
int dev_id;
|
||||
u16 saved_csr;
|
||||
u16 enabled_irqs;
|
||||
const char *dev_name;
|
||||
void (*callback)(int lch, u16 ch_status, void *data);
|
||||
void *data;
|
||||
long flags;
|
||||
/* required for Dynamic chaining */
|
||||
int prev_linked_ch;
|
||||
int next_linked_ch;
|
||||
int state;
|
||||
int chain_id;
|
||||
int status;
|
||||
};
|
||||
|
||||
struct omap_dma_dev_attr {
|
||||
u32 dev_caps;
|
||||
u16 lch_count;
|
||||
u16 chan_count;
|
||||
struct omap_dma_lch *chan;
|
||||
};
|
||||
|
||||
/* System DMA platform data structure */
|
||||
struct omap_system_dma_plat_info {
|
||||
struct omap_dma_dev_attr *dma_attr;
|
||||
u32 errata;
|
||||
void (*disable_irq_lch)(int lch);
|
||||
void (*show_dma_caps)(void);
|
||||
void (*clear_lch_regs)(int lch);
|
||||
void (*clear_dma)(int lch);
|
||||
void (*dma_write)(u32 val, int reg, int lch);
|
||||
u32 (*dma_read)(int reg, int lch);
|
||||
};
|
||||
|
||||
extern void __init omap_init_consistent_dma_size(void);
|
||||
extern void omap_set_dma_priority(int lch, int dst_port, int priority);
|
||||
extern int omap_request_dma(int dev_id, const char *dev_name,
|
||||
void (*callback)(int lch, u16 ch_status, void *data),
|
||||
void *data, int *dma_ch);
|
||||
extern void omap_enable_dma_irq(int ch, u16 irq_bits);
|
||||
extern void omap_disable_dma_irq(int ch, u16 irq_bits);
|
||||
extern void omap_free_dma(int ch);
|
||||
extern void omap_start_dma(int lch);
|
||||
extern void omap_stop_dma(int lch);
|
||||
extern void omap_set_dma_transfer_params(int lch, int data_type,
|
||||
int elem_count, int frame_count,
|
||||
int sync_mode,
|
||||
int dma_trigger, int src_or_dst_synch);
|
||||
extern void omap_set_dma_color_mode(int lch, enum omap_dma_color_mode mode,
|
||||
u32 color);
|
||||
extern void omap_set_dma_write_mode(int lch, enum omap_dma_write_mode mode);
|
||||
extern void omap_set_dma_channel_mode(int lch, enum omap_dma_channel_mode mode);
|
||||
|
||||
extern void omap_set_dma_src_params(int lch, int src_port, int src_amode,
|
||||
unsigned long src_start,
|
||||
int src_ei, int src_fi);
|
||||
extern void omap_set_dma_src_index(int lch, int eidx, int fidx);
|
||||
extern void omap_set_dma_src_data_pack(int lch, int enable);
|
||||
extern void omap_set_dma_src_burst_mode(int lch,
|
||||
enum omap_dma_burst_mode burst_mode);
|
||||
|
||||
extern void omap_set_dma_dest_params(int lch, int dest_port, int dest_amode,
|
||||
unsigned long dest_start,
|
||||
int dst_ei, int dst_fi);
|
||||
extern void omap_set_dma_dest_index(int lch, int eidx, int fidx);
|
||||
extern void omap_set_dma_dest_data_pack(int lch, int enable);
|
||||
extern void omap_set_dma_dest_burst_mode(int lch,
|
||||
enum omap_dma_burst_mode burst_mode);
|
||||
|
||||
extern void omap_set_dma_params(int lch,
|
||||
struct omap_dma_channel_params *params);
|
||||
|
||||
extern void omap_dma_link_lch(int lch_head, int lch_queue);
|
||||
extern void omap_dma_unlink_lch(int lch_head, int lch_queue);
|
||||
|
||||
extern int omap_set_dma_callback(int lch,
|
||||
void (*callback)(int lch, u16 ch_status, void *data),
|
||||
void *data);
|
||||
extern dma_addr_t omap_get_dma_src_pos(int lch);
|
||||
extern dma_addr_t omap_get_dma_dst_pos(int lch);
|
||||
extern void omap_clear_dma(int lch);
|
||||
extern int omap_get_dma_active_status(int lch);
|
||||
extern int omap_dma_running(void);
|
||||
extern void omap_dma_set_global_params(int arb_rate, int max_fifo_depth,
|
||||
int tparams);
|
||||
extern int omap_dma_set_prio_lch(int lch, unsigned char read_prio,
|
||||
unsigned char write_prio);
|
||||
extern void omap_set_dma_dst_endian_type(int lch, enum end_type etype);
|
||||
extern void omap_set_dma_src_endian_type(int lch, enum end_type etype);
|
||||
extern int omap_get_dma_index(int lch, int *ei, int *fi);
|
||||
|
||||
void omap_dma_global_context_save(void);
|
||||
void omap_dma_global_context_restore(void);
|
||||
|
||||
extern void omap_dma_disable_irq(int lch);
|
||||
|
||||
/* Chaining APIs */
|
||||
#ifndef CONFIG_ARCH_OMAP1
|
||||
extern int omap_request_dma_chain(int dev_id, const char *dev_name,
|
||||
void (*callback) (int lch, u16 ch_status,
|
||||
void *data),
|
||||
int *chain_id, int no_of_chans,
|
||||
int chain_mode,
|
||||
struct omap_dma_channel_params params);
|
||||
extern int omap_free_dma_chain(int chain_id);
|
||||
extern int omap_dma_chain_a_transfer(int chain_id, int src_start,
|
||||
int dest_start, int elem_count,
|
||||
int frame_count, void *callbk_data);
|
||||
extern int omap_start_dma_chain_transfers(int chain_id);
|
||||
extern int omap_stop_dma_chain_transfers(int chain_id);
|
||||
extern int omap_get_dma_chain_index(int chain_id, int *ei, int *fi);
|
||||
extern int omap_get_dma_chain_dst_pos(int chain_id);
|
||||
extern int omap_get_dma_chain_src_pos(int chain_id);
|
||||
|
||||
extern int omap_modify_dma_chain_params(int chain_id,
|
||||
struct omap_dma_channel_params params);
|
||||
extern int omap_dma_chain_status(int chain_id);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP1) && defined(CONFIG_FB_OMAP)
|
||||
#include <mach/lcd_dma.h>
|
||||
#else
|
||||
static inline int omap_lcd_dma_running(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __ASM_ARCH_DMA_H */
|
@@ -94,6 +94,7 @@ struct dmtimer_platform_data {
|
||||
/* set_timer_src - Only used for OMAP1 devices */
|
||||
int (*set_timer_src)(struct platform_device *pdev, int source);
|
||||
u32 timer_capability;
|
||||
int (*get_context_loss_count)(struct device *);
|
||||
};
|
||||
|
||||
int omap_dm_timer_reserve_systimer(int id);
|
||||
@@ -263,6 +264,7 @@ struct omap_dm_timer {
|
||||
unsigned reserved:1;
|
||||
unsigned posted:1;
|
||||
struct timer_regs context;
|
||||
int (*get_context_loss_count)(struct device *);
|
||||
int ctx_loss_count;
|
||||
int revision;
|
||||
u32 capability;
|
||||
|
@@ -1,193 +0,0 @@
|
||||
/*
|
||||
* arch/arm/plat-omap/include/mach/fpga.h
|
||||
*
|
||||
* Interrupt handler for OMAP-1510 FPGA
|
||||
*
|
||||
* Copyright (C) 2001 RidgeRun, Inc.
|
||||
* Author: Greg Lonnon <glonnon@ridgerun.com>
|
||||
*
|
||||
* Copyright (C) 2002 MontaVista Software, Inc.
|
||||
*
|
||||
* Separated FPGA interrupts from innovator1510.c and cleaned up for 2.6
|
||||
* Copyright (C) 2004 Nokia Corporation by Tony Lindrgen <tony@atomide.com>
|
||||
*
|
||||
* 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_ARCH_OMAP_FPGA_H
|
||||
#define __ASM_ARCH_OMAP_FPGA_H
|
||||
|
||||
extern void omap1510_fpga_init_irq(void);
|
||||
|
||||
#define fpga_read(reg) __raw_readb(reg)
|
||||
#define fpga_write(val, reg) __raw_writeb(val, reg)
|
||||
|
||||
/*
|
||||
* ---------------------------------------------------------------------------
|
||||
* H2/P2 Debug board FPGA
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
/* maps in the FPGA registers and the ETHR registers */
|
||||
#define H2P2_DBG_FPGA_BASE 0xE8000000 /* VA */
|
||||
#define H2P2_DBG_FPGA_SIZE SZ_4K /* SIZE */
|
||||
#define H2P2_DBG_FPGA_START 0x04000000 /* PA */
|
||||
|
||||
#define H2P2_DBG_FPGA_ETHR_START (H2P2_DBG_FPGA_START + 0x300)
|
||||
#define H2P2_DBG_FPGA_FPGA_REV IOMEM(H2P2_DBG_FPGA_BASE + 0x10) /* FPGA Revision */
|
||||
#define H2P2_DBG_FPGA_BOARD_REV IOMEM(H2P2_DBG_FPGA_BASE + 0x12) /* Board Revision */
|
||||
#define H2P2_DBG_FPGA_GPIO IOMEM(H2P2_DBG_FPGA_BASE + 0x14) /* GPIO outputs */
|
||||
#define H2P2_DBG_FPGA_LEDS IOMEM(H2P2_DBG_FPGA_BASE + 0x16) /* LEDs outputs */
|
||||
#define H2P2_DBG_FPGA_MISC_INPUTS IOMEM(H2P2_DBG_FPGA_BASE + 0x18) /* Misc inputs */
|
||||
#define H2P2_DBG_FPGA_LAN_STATUS IOMEM(H2P2_DBG_FPGA_BASE + 0x1A) /* LAN Status line */
|
||||
#define H2P2_DBG_FPGA_LAN_RESET IOMEM(H2P2_DBG_FPGA_BASE + 0x1C) /* LAN Reset line */
|
||||
|
||||
/* NOTE: most boards don't have a static mapping for the FPGA ... */
|
||||
struct h2p2_dbg_fpga {
|
||||
/* offset 0x00 */
|
||||
u16 smc91x[8];
|
||||
/* offset 0x10 */
|
||||
u16 fpga_rev;
|
||||
u16 board_rev;
|
||||
u16 gpio_outputs;
|
||||
u16 leds;
|
||||
/* offset 0x18 */
|
||||
u16 misc_inputs;
|
||||
u16 lan_status;
|
||||
u16 lan_reset;
|
||||
u16 reserved0;
|
||||
/* offset 0x20 */
|
||||
u16 ps2_data;
|
||||
u16 ps2_ctrl;
|
||||
/* plus also 4 rs232 ports ... */
|
||||
};
|
||||
|
||||
/* LEDs definition on debug board (16 LEDs, all physically green) */
|
||||
#define H2P2_DBG_FPGA_LED_GREEN (1 << 15)
|
||||
#define H2P2_DBG_FPGA_LED_AMBER (1 << 14)
|
||||
#define H2P2_DBG_FPGA_LED_RED (1 << 13)
|
||||
#define H2P2_DBG_FPGA_LED_BLUE (1 << 12)
|
||||
/* cpu0 load-meter LEDs */
|
||||
#define H2P2_DBG_FPGA_LOAD_METER (1 << 0) // A bit of fun on our board ...
|
||||
#define H2P2_DBG_FPGA_LOAD_METER_SIZE 11
|
||||
#define H2P2_DBG_FPGA_LOAD_METER_MASK ((1 << H2P2_DBG_FPGA_LOAD_METER_SIZE) - 1)
|
||||
|
||||
#define H2P2_DBG_FPGA_P2_LED_TIMER (1 << 0)
|
||||
#define H2P2_DBG_FPGA_P2_LED_IDLE (1 << 1)
|
||||
|
||||
/*
|
||||
* ---------------------------------------------------------------------------
|
||||
* OMAP-1510 FPGA
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
#define OMAP1510_FPGA_BASE 0xE8000000 /* VA */
|
||||
#define OMAP1510_FPGA_SIZE SZ_4K
|
||||
#define OMAP1510_FPGA_START 0x08000000 /* PA */
|
||||
|
||||
/* Revision */
|
||||
#define OMAP1510_FPGA_REV_LOW IOMEM(OMAP1510_FPGA_BASE + 0x0)
|
||||
#define OMAP1510_FPGA_REV_HIGH IOMEM(OMAP1510_FPGA_BASE + 0x1)
|
||||
|
||||
#define OMAP1510_FPGA_LCD_PANEL_CONTROL IOMEM(OMAP1510_FPGA_BASE + 0x2)
|
||||
#define OMAP1510_FPGA_LED_DIGIT IOMEM(OMAP1510_FPGA_BASE + 0x3)
|
||||
#define INNOVATOR_FPGA_HID_SPI IOMEM(OMAP1510_FPGA_BASE + 0x4)
|
||||
#define OMAP1510_FPGA_POWER IOMEM(OMAP1510_FPGA_BASE + 0x5)
|
||||
|
||||
/* Interrupt status */
|
||||
#define OMAP1510_FPGA_ISR_LO IOMEM(OMAP1510_FPGA_BASE + 0x6)
|
||||
#define OMAP1510_FPGA_ISR_HI IOMEM(OMAP1510_FPGA_BASE + 0x7)
|
||||
|
||||
/* Interrupt mask */
|
||||
#define OMAP1510_FPGA_IMR_LO IOMEM(OMAP1510_FPGA_BASE + 0x8)
|
||||
#define OMAP1510_FPGA_IMR_HI IOMEM(OMAP1510_FPGA_BASE + 0x9)
|
||||
|
||||
/* Reset registers */
|
||||
#define OMAP1510_FPGA_HOST_RESET IOMEM(OMAP1510_FPGA_BASE + 0xa)
|
||||
#define OMAP1510_FPGA_RST IOMEM(OMAP1510_FPGA_BASE + 0xb)
|
||||
|
||||
#define OMAP1510_FPGA_AUDIO IOMEM(OMAP1510_FPGA_BASE + 0xc)
|
||||
#define OMAP1510_FPGA_DIP IOMEM(OMAP1510_FPGA_BASE + 0xe)
|
||||
#define OMAP1510_FPGA_FPGA_IO IOMEM(OMAP1510_FPGA_BASE + 0xf)
|
||||
#define OMAP1510_FPGA_UART1 IOMEM(OMAP1510_FPGA_BASE + 0x14)
|
||||
#define OMAP1510_FPGA_UART2 IOMEM(OMAP1510_FPGA_BASE + 0x15)
|
||||
#define OMAP1510_FPGA_OMAP1510_STATUS IOMEM(OMAP1510_FPGA_BASE + 0x16)
|
||||
#define OMAP1510_FPGA_BOARD_REV IOMEM(OMAP1510_FPGA_BASE + 0x18)
|
||||
#define OMAP1510P1_PPT_DATA IOMEM(OMAP1510_FPGA_BASE + 0x100)
|
||||
#define OMAP1510P1_PPT_STATUS IOMEM(OMAP1510_FPGA_BASE + 0x101)
|
||||
#define OMAP1510P1_PPT_CONTROL IOMEM(OMAP1510_FPGA_BASE + 0x102)
|
||||
|
||||
#define OMAP1510_FPGA_TOUCHSCREEN IOMEM(OMAP1510_FPGA_BASE + 0x204)
|
||||
|
||||
#define INNOVATOR_FPGA_INFO IOMEM(OMAP1510_FPGA_BASE + 0x205)
|
||||
#define INNOVATOR_FPGA_LCD_BRIGHT_LO IOMEM(OMAP1510_FPGA_BASE + 0x206)
|
||||
#define INNOVATOR_FPGA_LCD_BRIGHT_HI IOMEM(OMAP1510_FPGA_BASE + 0x207)
|
||||
#define INNOVATOR_FPGA_LED_GRN_LO IOMEM(OMAP1510_FPGA_BASE + 0x208)
|
||||
#define INNOVATOR_FPGA_LED_GRN_HI IOMEM(OMAP1510_FPGA_BASE + 0x209)
|
||||
#define INNOVATOR_FPGA_LED_RED_LO IOMEM(OMAP1510_FPGA_BASE + 0x20a)
|
||||
#define INNOVATOR_FPGA_LED_RED_HI IOMEM(OMAP1510_FPGA_BASE + 0x20b)
|
||||
#define INNOVATOR_FPGA_CAM_USB_CONTROL IOMEM(OMAP1510_FPGA_BASE + 0x20c)
|
||||
#define INNOVATOR_FPGA_EXP_CONTROL IOMEM(OMAP1510_FPGA_BASE + 0x20d)
|
||||
#define INNOVATOR_FPGA_ISR2 IOMEM(OMAP1510_FPGA_BASE + 0x20e)
|
||||
#define INNOVATOR_FPGA_IMR2 IOMEM(OMAP1510_FPGA_BASE + 0x210)
|
||||
|
||||
#define OMAP1510_FPGA_ETHR_START (OMAP1510_FPGA_START + 0x300)
|
||||
|
||||
/*
|
||||
* Power up Giga UART driver, turn on HID clock.
|
||||
* Turn off BT power, since we're not using it and it
|
||||
* draws power.
|
||||
*/
|
||||
#define OMAP1510_FPGA_RESET_VALUE 0x42
|
||||
|
||||
#define OMAP1510_FPGA_PCR_IF_PD0 (1 << 7)
|
||||
#define OMAP1510_FPGA_PCR_COM2_EN (1 << 6)
|
||||
#define OMAP1510_FPGA_PCR_COM1_EN (1 << 5)
|
||||
#define OMAP1510_FPGA_PCR_EXP_PD0 (1 << 4)
|
||||
#define OMAP1510_FPGA_PCR_EXP_PD1 (1 << 3)
|
||||
#define OMAP1510_FPGA_PCR_48MHZ_CLK (1 << 2)
|
||||
#define OMAP1510_FPGA_PCR_4MHZ_CLK (1 << 1)
|
||||
#define OMAP1510_FPGA_PCR_RSRVD_BIT0 (1 << 0)
|
||||
|
||||
/*
|
||||
* Innovator/OMAP1510 FPGA HID register bit definitions
|
||||
*/
|
||||
#define OMAP1510_FPGA_HID_SCLK (1<<0) /* output */
|
||||
#define OMAP1510_FPGA_HID_MOSI (1<<1) /* output */
|
||||
#define OMAP1510_FPGA_HID_nSS (1<<2) /* output 0/1 chip idle/select */
|
||||
#define OMAP1510_FPGA_HID_nHSUS (1<<3) /* output 0/1 host active/suspended */
|
||||
#define OMAP1510_FPGA_HID_MISO (1<<4) /* input */
|
||||
#define OMAP1510_FPGA_HID_ATN (1<<5) /* input 0/1 chip idle/ATN */
|
||||
#define OMAP1510_FPGA_HID_rsrvd (1<<6)
|
||||
#define OMAP1510_FPGA_HID_RESETn (1<<7) /* output - 0/1 USAR reset/run */
|
||||
|
||||
/* The FPGA IRQ is cascaded through GPIO_13 */
|
||||
#define OMAP1510_INT_FPGA (IH_GPIO_BASE + 13)
|
||||
|
||||
/* IRQ Numbers for interrupts muxed through the FPGA */
|
||||
#define OMAP1510_INT_FPGA_ATN (OMAP_FPGA_IRQ_BASE + 0)
|
||||
#define OMAP1510_INT_FPGA_ACK (OMAP_FPGA_IRQ_BASE + 1)
|
||||
#define OMAP1510_INT_FPGA2 (OMAP_FPGA_IRQ_BASE + 2)
|
||||
#define OMAP1510_INT_FPGA3 (OMAP_FPGA_IRQ_BASE + 3)
|
||||
#define OMAP1510_INT_FPGA4 (OMAP_FPGA_IRQ_BASE + 4)
|
||||
#define OMAP1510_INT_FPGA5 (OMAP_FPGA_IRQ_BASE + 5)
|
||||
#define OMAP1510_INT_FPGA6 (OMAP_FPGA_IRQ_BASE + 6)
|
||||
#define OMAP1510_INT_FPGA7 (OMAP_FPGA_IRQ_BASE + 7)
|
||||
#define OMAP1510_INT_FPGA8 (OMAP_FPGA_IRQ_BASE + 8)
|
||||
#define OMAP1510_INT_FPGA9 (OMAP_FPGA_IRQ_BASE + 9)
|
||||
#define OMAP1510_INT_FPGA10 (OMAP_FPGA_IRQ_BASE + 10)
|
||||
#define OMAP1510_INT_FPGA11 (OMAP_FPGA_IRQ_BASE + 11)
|
||||
#define OMAP1510_INT_FPGA12 (OMAP_FPGA_IRQ_BASE + 12)
|
||||
#define OMAP1510_INT_ETHER (OMAP_FPGA_IRQ_BASE + 13)
|
||||
#define OMAP1510_INT_FPGAUART1 (OMAP_FPGA_IRQ_BASE + 14)
|
||||
#define OMAP1510_INT_FPGAUART2 (OMAP_FPGA_IRQ_BASE + 15)
|
||||
#define OMAP1510_INT_FPGA_TS (OMAP_FPGA_IRQ_BASE + 16)
|
||||
#define OMAP1510_INT_FPGA17 (OMAP_FPGA_IRQ_BASE + 17)
|
||||
#define OMAP1510_INT_FPGA_CAM (OMAP_FPGA_IRQ_BASE + 18)
|
||||
#define OMAP1510_INT_FPGA_RTC_A (OMAP_FPGA_IRQ_BASE + 19)
|
||||
#define OMAP1510_INT_FPGA_RTC_B (OMAP_FPGA_IRQ_BASE + 20)
|
||||
#define OMAP1510_INT_FPGA_CD (OMAP_FPGA_IRQ_BASE + 21)
|
||||
#define OMAP1510_INT_FPGA22 (OMAP_FPGA_IRQ_BASE + 22)
|
||||
#define OMAP1510_INT_FPGA23 (OMAP_FPGA_IRQ_BASE + 23)
|
||||
|
||||
#endif
|
@@ -1,190 +0,0 @@
|
||||
/*
|
||||
* General-Purpose Memory Controller for OMAP2
|
||||
*
|
||||
* Copyright (C) 2005-2006 Nokia Corporation
|
||||
*
|
||||
* 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 __OMAP2_GPMC_H
|
||||
#define __OMAP2_GPMC_H
|
||||
|
||||
/* Maximum Number of Chip Selects */
|
||||
#define GPMC_CS_NUM 8
|
||||
|
||||
#define GPMC_CS_CONFIG1 0x00
|
||||
#define GPMC_CS_CONFIG2 0x04
|
||||
#define GPMC_CS_CONFIG3 0x08
|
||||
#define GPMC_CS_CONFIG4 0x0c
|
||||
#define GPMC_CS_CONFIG5 0x10
|
||||
#define GPMC_CS_CONFIG6 0x14
|
||||
#define GPMC_CS_CONFIG7 0x18
|
||||
#define GPMC_CS_NAND_COMMAND 0x1c
|
||||
#define GPMC_CS_NAND_ADDRESS 0x20
|
||||
#define GPMC_CS_NAND_DATA 0x24
|
||||
|
||||
/* Control Commands */
|
||||
#define GPMC_CONFIG_RDY_BSY 0x00000001
|
||||
#define GPMC_CONFIG_DEV_SIZE 0x00000002
|
||||
#define GPMC_CONFIG_DEV_TYPE 0x00000003
|
||||
#define GPMC_SET_IRQ_STATUS 0x00000004
|
||||
#define GPMC_CONFIG_WP 0x00000005
|
||||
|
||||
#define GPMC_GET_IRQ_STATUS 0x00000006
|
||||
#define GPMC_PREFETCH_FIFO_CNT 0x00000007 /* bytes available in FIFO for r/w */
|
||||
#define GPMC_PREFETCH_COUNT 0x00000008 /* remaining bytes to be read/write*/
|
||||
#define GPMC_STATUS_BUFFER 0x00000009 /* 1: buffer is available to write */
|
||||
|
||||
#define GPMC_NAND_COMMAND 0x0000000a
|
||||
#define GPMC_NAND_ADDRESS 0x0000000b
|
||||
#define GPMC_NAND_DATA 0x0000000c
|
||||
|
||||
#define GPMC_ENABLE_IRQ 0x0000000d
|
||||
|
||||
/* ECC commands */
|
||||
#define GPMC_ECC_READ 0 /* Reset Hardware ECC for read */
|
||||
#define GPMC_ECC_WRITE 1 /* Reset Hardware ECC for write */
|
||||
#define GPMC_ECC_READSYN 2 /* Reset before syndrom is read back */
|
||||
|
||||
#define GPMC_CONFIG1_WRAPBURST_SUPP (1 << 31)
|
||||
#define GPMC_CONFIG1_READMULTIPLE_SUPP (1 << 30)
|
||||
#define GPMC_CONFIG1_READTYPE_ASYNC (0 << 29)
|
||||
#define GPMC_CONFIG1_READTYPE_SYNC (1 << 29)
|
||||
#define GPMC_CONFIG1_WRITEMULTIPLE_SUPP (1 << 28)
|
||||
#define GPMC_CONFIG1_WRITETYPE_ASYNC (0 << 27)
|
||||
#define GPMC_CONFIG1_WRITETYPE_SYNC (1 << 27)
|
||||
#define GPMC_CONFIG1_CLKACTIVATIONTIME(val) ((val & 3) << 25)
|
||||
#define GPMC_CONFIG1_PAGE_LEN(val) ((val & 3) << 23)
|
||||
#define GPMC_CONFIG1_WAIT_READ_MON (1 << 22)
|
||||
#define GPMC_CONFIG1_WAIT_WRITE_MON (1 << 21)
|
||||
#define GPMC_CONFIG1_WAIT_MON_IIME(val) ((val & 3) << 18)
|
||||
#define GPMC_CONFIG1_WAIT_PIN_SEL(val) ((val & 3) << 16)
|
||||
#define GPMC_CONFIG1_DEVICESIZE(val) ((val & 3) << 12)
|
||||
#define GPMC_CONFIG1_DEVICESIZE_16 GPMC_CONFIG1_DEVICESIZE(1)
|
||||
#define GPMC_CONFIG1_DEVICETYPE(val) ((val & 3) << 10)
|
||||
#define GPMC_CONFIG1_DEVICETYPE_NOR GPMC_CONFIG1_DEVICETYPE(0)
|
||||
#define GPMC_CONFIG1_MUXADDDATA (1 << 9)
|
||||
#define GPMC_CONFIG1_TIME_PARA_GRAN (1 << 4)
|
||||
#define GPMC_CONFIG1_FCLK_DIV(val) (val & 3)
|
||||
#define GPMC_CONFIG1_FCLK_DIV2 (GPMC_CONFIG1_FCLK_DIV(1))
|
||||
#define GPMC_CONFIG1_FCLK_DIV3 (GPMC_CONFIG1_FCLK_DIV(2))
|
||||
#define GPMC_CONFIG1_FCLK_DIV4 (GPMC_CONFIG1_FCLK_DIV(3))
|
||||
#define GPMC_CONFIG7_CSVALID (1 << 6)
|
||||
|
||||
#define GPMC_DEVICETYPE_NOR 0
|
||||
#define GPMC_DEVICETYPE_NAND 2
|
||||
#define GPMC_CONFIG_WRITEPROTECT 0x00000010
|
||||
#define GPMC_STATUS_BUFF_EMPTY 0x00000001
|
||||
#define WR_RD_PIN_MONITORING 0x00600000
|
||||
#define GPMC_PREFETCH_STATUS_FIFO_CNT(val) ((val >> 24) & 0x7F)
|
||||
#define GPMC_PREFETCH_STATUS_COUNT(val) (val & 0x00003fff)
|
||||
#define GPMC_IRQ_FIFOEVENTENABLE 0x01
|
||||
#define GPMC_IRQ_COUNT_EVENT 0x02
|
||||
|
||||
#define PREFETCH_FIFOTHRESHOLD_MAX 0x40
|
||||
#define PREFETCH_FIFOTHRESHOLD(val) ((val) << 8)
|
||||
|
||||
enum omap_ecc {
|
||||
/* 1-bit ecc: stored at end of spare area */
|
||||
OMAP_ECC_HAMMING_CODE_DEFAULT = 0, /* Default, s/w method */
|
||||
OMAP_ECC_HAMMING_CODE_HW, /* gpmc to detect the error */
|
||||
/* 1-bit ecc: stored at beginning of spare area as romcode */
|
||||
OMAP_ECC_HAMMING_CODE_HW_ROMCODE, /* gpmc method & romcode layout */
|
||||
OMAP_ECC_BCH4_CODE_HW, /* 4-bit BCH ecc code */
|
||||
OMAP_ECC_BCH8_CODE_HW, /* 8-bit BCH ecc code */
|
||||
};
|
||||
|
||||
/*
|
||||
* Note that all values in this struct are in nanoseconds except sync_clk
|
||||
* (which is in picoseconds), while the register values are in gpmc_fck cycles.
|
||||
*/
|
||||
struct gpmc_timings {
|
||||
/* Minimum clock period for synchronous mode (in picoseconds) */
|
||||
u32 sync_clk;
|
||||
|
||||
/* Chip-select signal timings corresponding to GPMC_CS_CONFIG2 */
|
||||
u16 cs_on; /* Assertion time */
|
||||
u16 cs_rd_off; /* Read deassertion time */
|
||||
u16 cs_wr_off; /* Write deassertion time */
|
||||
|
||||
/* ADV signal timings corresponding to GPMC_CONFIG3 */
|
||||
u16 adv_on; /* Assertion time */
|
||||
u16 adv_rd_off; /* Read deassertion time */
|
||||
u16 adv_wr_off; /* Write deassertion time */
|
||||
|
||||
/* WE signals timings corresponding to GPMC_CONFIG4 */
|
||||
u16 we_on; /* WE assertion time */
|
||||
u16 we_off; /* WE deassertion time */
|
||||
|
||||
/* OE signals timings corresponding to GPMC_CONFIG4 */
|
||||
u16 oe_on; /* OE assertion time */
|
||||
u16 oe_off; /* OE deassertion time */
|
||||
|
||||
/* Access time and cycle time timings corresponding to GPMC_CONFIG5 */
|
||||
u16 page_burst_access; /* Multiple access word delay */
|
||||
u16 access; /* Start-cycle to first data valid delay */
|
||||
u16 rd_cycle; /* Total read cycle time */
|
||||
u16 wr_cycle; /* Total write cycle time */
|
||||
|
||||
/* The following are only on OMAP3430 */
|
||||
u16 wr_access; /* WRACCESSTIME */
|
||||
u16 wr_data_mux_bus; /* WRDATAONADMUXBUS */
|
||||
};
|
||||
|
||||
struct gpmc_nand_regs {
|
||||
void __iomem *gpmc_status;
|
||||
void __iomem *gpmc_nand_command;
|
||||
void __iomem *gpmc_nand_address;
|
||||
void __iomem *gpmc_nand_data;
|
||||
void __iomem *gpmc_prefetch_config1;
|
||||
void __iomem *gpmc_prefetch_config2;
|
||||
void __iomem *gpmc_prefetch_control;
|
||||
void __iomem *gpmc_prefetch_status;
|
||||
void __iomem *gpmc_ecc_config;
|
||||
void __iomem *gpmc_ecc_control;
|
||||
void __iomem *gpmc_ecc_size_config;
|
||||
void __iomem *gpmc_ecc1_result;
|
||||
void __iomem *gpmc_bch_result0;
|
||||
};
|
||||
|
||||
extern void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs);
|
||||
extern int gpmc_get_client_irq(unsigned irq_config);
|
||||
|
||||
extern unsigned int gpmc_ns_to_ticks(unsigned int time_ns);
|
||||
extern unsigned int gpmc_ps_to_ticks(unsigned int time_ps);
|
||||
extern unsigned int gpmc_ticks_to_ns(unsigned int ticks);
|
||||
extern unsigned int gpmc_round_ns_to_ticks(unsigned int time_ns);
|
||||
extern unsigned long gpmc_get_fclk_period(void);
|
||||
|
||||
extern void gpmc_cs_write_reg(int cs, int idx, u32 val);
|
||||
extern u32 gpmc_cs_read_reg(int cs, int idx);
|
||||
extern int gpmc_cs_calc_divider(int cs, unsigned int sync_clk);
|
||||
extern int gpmc_cs_set_timings(int cs, const struct gpmc_timings *t);
|
||||
extern int gpmc_cs_request(int cs, unsigned long size, unsigned long *base);
|
||||
extern void gpmc_cs_free(int cs);
|
||||
extern int gpmc_cs_set_reserved(int cs, int reserved);
|
||||
extern int gpmc_cs_reserved(int cs);
|
||||
extern int gpmc_prefetch_enable(int cs, int fifo_th, int dma_mode,
|
||||
unsigned int u32_count, int is_write);
|
||||
extern int gpmc_prefetch_reset(int cs);
|
||||
extern void omap3_gpmc_save_context(void);
|
||||
extern void omap3_gpmc_restore_context(void);
|
||||
extern int gpmc_read_status(int cmd);
|
||||
extern int gpmc_cs_configure(int cs, int cmd, int wval);
|
||||
extern int gpmc_nand_read(int cs, int cmd);
|
||||
extern int gpmc_nand_write(int cs, int cmd, int wval);
|
||||
|
||||
int gpmc_enable_hwecc(int cs, int mode, int dev_width, int ecc_size);
|
||||
int gpmc_calculate_ecc(int cs, const u_char *dat, u_char *ecc_code);
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP3
|
||||
int gpmc_init_hwecc_bch(int cs, int nsectors, int nerrors);
|
||||
int gpmc_enable_hwecc_bch(int cs, int mode, int dev_width, int nsectors,
|
||||
int nerrors);
|
||||
int gpmc_calculate_ecc_bch4(int cs, const u_char *dat, u_char *ecc);
|
||||
int gpmc_calculate_ecc_bch8(int cs, const u_char *dat, u_char *ecc);
|
||||
#endif /* CONFIG_ARCH_OMAP3 */
|
||||
|
||||
#endif
|
@@ -18,11 +18,15 @@
|
||||
* 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
#ifndef __ASM__ARCH_OMAP_I2C_H
|
||||
#define __ASM__ARCH_OMAP_I2C_H
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c-omap.h>
|
||||
#ifndef __PLAT_OMAP_I2C_H
|
||||
#define __PLAT_OMAP_I2C_H
|
||||
|
||||
struct i2c_board_info;
|
||||
struct omap_i2c_bus_platform_data;
|
||||
|
||||
int omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata,
|
||||
int bus_id);
|
||||
|
||||
#if defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)
|
||||
extern int omap_register_i2c_bus(int bus_id, u32 clkrate,
|
||||
@@ -37,23 +41,7 @@ static inline int omap_register_i2c_bus(int bus_id, u32 clkrate,
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* i2c_dev_attr - OMAP I2C controller device attributes for omap_hwmod
|
||||
* @fifo_depth: total controller FIFO size (in bytes)
|
||||
* @flags: differences in hardware support capability
|
||||
*
|
||||
* @fifo_depth represents what exists on the hardware, not what is
|
||||
* actually configured at runtime by the device driver.
|
||||
*/
|
||||
struct omap_i2c_dev_attr {
|
||||
u8 fifo_depth;
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
void __init omap1_i2c_mux_pins(int bus_id);
|
||||
void __init omap2_i2c_mux_pins(int bus_id);
|
||||
|
||||
struct omap_hwmod;
|
||||
int omap_i2c_reset(struct omap_hwmod *oh);
|
||||
|
||||
#endif /* __ASM__ARCH_OMAP_I2C_H */
|
||||
#endif /* __PLAT_OMAP_I2C_H */
|
||||
|
@@ -1,24 +0,0 @@
|
||||
/*
|
||||
* arch/arm/plat-omap/include/mach/led.h
|
||||
*
|
||||
* Copyright (C) 2006 Samsung Electronics
|
||||
* Kyungmin Park <kyungmin.park@samsung.com>
|
||||
*
|
||||
* 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 ASMARM_ARCH_LED_H
|
||||
#define ASMARM_ARCH_LED_H
|
||||
|
||||
struct omap_led_config {
|
||||
struct led_classdev cdev;
|
||||
s16 gpio;
|
||||
};
|
||||
|
||||
struct omap_led_platform_data {
|
||||
s16 nr_leds;
|
||||
struct omap_led_config *leds;
|
||||
};
|
||||
|
||||
#endif
|
@@ -1,49 +0,0 @@
|
||||
/*
|
||||
* arch/arm/plat-omap/include/mach/menelaus.h
|
||||
*
|
||||
* Functions to access Menelaus power management chip
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_MENELAUS_H
|
||||
#define __ASM_ARCH_MENELAUS_H
|
||||
|
||||
struct device;
|
||||
|
||||
struct menelaus_platform_data {
|
||||
int (* late_init)(struct device *dev);
|
||||
};
|
||||
|
||||
extern int menelaus_register_mmc_callback(void (*callback)(void *data, u8 card_mask),
|
||||
void *data);
|
||||
extern void menelaus_unregister_mmc_callback(void);
|
||||
extern int menelaus_set_mmc_opendrain(int slot, int enable);
|
||||
extern int menelaus_set_mmc_slot(int slot, int enable, int power, int cd_on);
|
||||
|
||||
extern int menelaus_set_vmem(unsigned int mV);
|
||||
extern int menelaus_set_vio(unsigned int mV);
|
||||
extern int menelaus_set_vmmc(unsigned int mV);
|
||||
extern int menelaus_set_vaux(unsigned int mV);
|
||||
extern int menelaus_set_vdcdc(int dcdc, unsigned int mV);
|
||||
extern int menelaus_set_slot_sel(int enable);
|
||||
extern int menelaus_get_slot_pin_states(void);
|
||||
extern int menelaus_set_vcore_sw(unsigned int mV);
|
||||
extern int menelaus_set_vcore_hw(unsigned int roof_mV, unsigned int floor_mV);
|
||||
|
||||
#define EN_VPLL_SLEEP (1 << 7)
|
||||
#define EN_VMMC_SLEEP (1 << 6)
|
||||
#define EN_VAUX_SLEEP (1 << 5)
|
||||
#define EN_VIO_SLEEP (1 << 4)
|
||||
#define EN_VMEM_SLEEP (1 << 3)
|
||||
#define EN_DC3_SLEEP (1 << 2)
|
||||
#define EN_DC2_SLEEP (1 << 1)
|
||||
#define EN_VC_SLEEP (1 << 0)
|
||||
|
||||
extern int menelaus_set_regulator_sleep(int enable, u32 val);
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP2) && defined(CONFIG_MENELAUS)
|
||||
#define omap_has_menelaus() 1
|
||||
#else
|
||||
#define omap_has_menelaus() 0
|
||||
#endif
|
||||
|
||||
#endif
|
@@ -1,188 +0,0 @@
|
||||
/*
|
||||
* MMC definitions for OMAP2
|
||||
*
|
||||
* Copyright (C) 2006 Nokia Corporation
|
||||
*
|
||||
* 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 __OMAP2_MMC_H
|
||||
#define __OMAP2_MMC_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/mmc/host.h>
|
||||
|
||||
#include <plat/omap_hwmod.h>
|
||||
|
||||
#define OMAP15XX_NR_MMC 1
|
||||
#define OMAP16XX_NR_MMC 2
|
||||
#define OMAP1_MMC_SIZE 0x080
|
||||
#define OMAP1_MMC1_BASE 0xfffb7800
|
||||
#define OMAP1_MMC2_BASE 0xfffb7c00 /* omap16xx only */
|
||||
|
||||
#define OMAP24XX_NR_MMC 2
|
||||
#define OMAP2420_MMC_SIZE OMAP1_MMC_SIZE
|
||||
#define OMAP2_MMC1_BASE 0x4809c000
|
||||
|
||||
#define OMAP4_MMC_REG_OFFSET 0x100
|
||||
|
||||
#define OMAP_MMC_MAX_SLOTS 2
|
||||
|
||||
/*
|
||||
* struct omap_mmc_dev_attr.flags possibilities
|
||||
*
|
||||
* OMAP_HSMMC_SUPPORTS_DUAL_VOLT: Some HSMMC controller instances can
|
||||
* operate with either 1.8Vdc or 3.0Vdc card voltages; this flag
|
||||
* should be set if this is the case. See for example Section 22.5.3
|
||||
* "MMC/SD/SDIO1 Bus Voltage Selection" of the OMAP34xx Multimedia
|
||||
* Device Silicon Revision 3.1.x Revision ZR (July 2011) (SWPU223R).
|
||||
*
|
||||
* OMAP_HSMMC_BROKEN_MULTIBLOCK_READ: Multiple-block read transfers
|
||||
* don't work correctly on some MMC controller instances on some
|
||||
* OMAP3 SoCs; this flag should be set if this is the case. See
|
||||
* for example Advisory 2.1.1.128 "MMC: Multiple Block Read
|
||||
* Operation Issue" in _OMAP3530/3525/3515/3503 Silicon Errata_
|
||||
* Revision F (October 2010) (SPRZ278F).
|
||||
*/
|
||||
#define OMAP_HSMMC_SUPPORTS_DUAL_VOLT BIT(0)
|
||||
#define OMAP_HSMMC_BROKEN_MULTIBLOCK_READ BIT(1)
|
||||
|
||||
struct omap_mmc_dev_attr {
|
||||
u8 flags;
|
||||
};
|
||||
|
||||
struct omap_mmc_platform_data {
|
||||
/* back-link to device */
|
||||
struct device *dev;
|
||||
|
||||
/* number of slots per controller */
|
||||
unsigned nr_slots:2;
|
||||
|
||||
/* set if your board has components or wiring that limits the
|
||||
* maximum frequency on the MMC bus */
|
||||
unsigned int max_freq;
|
||||
|
||||
/* switch the bus to a new slot */
|
||||
int (*switch_slot)(struct device *dev, int slot);
|
||||
/* initialize board-specific MMC functionality, can be NULL if
|
||||
* not supported */
|
||||
int (*init)(struct device *dev);
|
||||
void (*cleanup)(struct device *dev);
|
||||
void (*shutdown)(struct device *dev);
|
||||
|
||||
/* To handle board related suspend/resume functionality for MMC */
|
||||
int (*suspend)(struct device *dev, int slot);
|
||||
int (*resume)(struct device *dev, int slot);
|
||||
|
||||
/* Return context loss count due to PM states changing */
|
||||
int (*get_context_loss_count)(struct device *dev);
|
||||
|
||||
/* Integrating attributes from the omap_hwmod layer */
|
||||
u8 controller_flags;
|
||||
|
||||
/* Register offset deviation */
|
||||
u16 reg_offset;
|
||||
|
||||
struct omap_mmc_slot_data {
|
||||
|
||||
/*
|
||||
* 4/8 wires and any additional host capabilities
|
||||
* need to OR'd all capabilities (ref. linux/mmc/host.h)
|
||||
*/
|
||||
u8 wires; /* Used for the MMC driver on omap1 and 2420 */
|
||||
u32 caps; /* Used for the MMC driver on 2430 and later */
|
||||
u32 pm_caps; /* PM capabilities of the mmc */
|
||||
|
||||
/*
|
||||
* nomux means "standard" muxing is wrong on this board, and
|
||||
* that board-specific code handled it before common init logic.
|
||||
*/
|
||||
unsigned nomux:1;
|
||||
|
||||
/* switch pin can be for card detect (default) or card cover */
|
||||
unsigned cover:1;
|
||||
|
||||
/* use the internal clock */
|
||||
unsigned internal_clock:1;
|
||||
|
||||
/* nonremovable e.g. eMMC */
|
||||
unsigned nonremovable:1;
|
||||
|
||||
/* Try to sleep or power off when possible */
|
||||
unsigned power_saving:1;
|
||||
|
||||
/* If using power_saving and the MMC power is not to go off */
|
||||
unsigned no_off:1;
|
||||
|
||||
/* eMMC does not handle power off when not in sleep state */
|
||||
unsigned no_regulator_off_init:1;
|
||||
|
||||
/* Regulator off remapped to sleep */
|
||||
unsigned vcc_aux_disable_is_sleep:1;
|
||||
|
||||
/* we can put the features above into this variable */
|
||||
#define HSMMC_HAS_PBIAS (1 << 0)
|
||||
#define HSMMC_HAS_UPDATED_RESET (1 << 1)
|
||||
unsigned features;
|
||||
|
||||
int switch_pin; /* gpio (card detect) */
|
||||
int gpio_wp; /* gpio (write protect) */
|
||||
|
||||
int (*set_bus_mode)(struct device *dev, int slot, int bus_mode);
|
||||
int (*set_power)(struct device *dev, int slot,
|
||||
int power_on, int vdd);
|
||||
int (*get_ro)(struct device *dev, int slot);
|
||||
void (*remux)(struct device *dev, int slot, int power_on);
|
||||
/* Call back before enabling / disabling regulators */
|
||||
void (*before_set_reg)(struct device *dev, int slot,
|
||||
int power_on, int vdd);
|
||||
/* Call back after enabling / disabling regulators */
|
||||
void (*after_set_reg)(struct device *dev, int slot,
|
||||
int power_on, int vdd);
|
||||
/* if we have special card, init it using this callback */
|
||||
void (*init_card)(struct mmc_card *card);
|
||||
|
||||
/* return MMC cover switch state, can be NULL if not supported.
|
||||
*
|
||||
* possible return values:
|
||||
* 0 - closed
|
||||
* 1 - open
|
||||
*/
|
||||
int (*get_cover_state)(struct device *dev, int slot);
|
||||
|
||||
const char *name;
|
||||
u32 ocr_mask;
|
||||
|
||||
/* Card detection IRQs */
|
||||
int card_detect_irq;
|
||||
int (*card_detect)(struct device *dev, int slot);
|
||||
|
||||
unsigned int ban_openended:1;
|
||||
|
||||
} slots[OMAP_MMC_MAX_SLOTS];
|
||||
};
|
||||
|
||||
/* called from board-specific card detection service routine */
|
||||
extern void omap_mmc_notify_cover_event(struct device *dev, int slot,
|
||||
int is_closed);
|
||||
|
||||
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
|
||||
void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
|
||||
int nr_controllers);
|
||||
void omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data);
|
||||
#else
|
||||
static inline void omap1_init_mmc(struct omap_mmc_platform_data **mmc_data,
|
||||
int nr_controllers)
|
||||
{
|
||||
}
|
||||
static inline void omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int omap_msdi_reset(struct omap_hwmod *oh);
|
||||
|
||||
#endif
|
@@ -1,120 +0,0 @@
|
||||
/*
|
||||
* Support for compiling in multiple OMAP processors
|
||||
*
|
||||
* Copyright (C) 2010 Nokia Corporation
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __PLAT_OMAP_MULTI_H
|
||||
#define __PLAT_OMAP_MULTI_H
|
||||
|
||||
/*
|
||||
* Test if multicore OMAP support is needed
|
||||
*/
|
||||
#undef MULTI_OMAP1
|
||||
#undef MULTI_OMAP2
|
||||
#undef OMAP_NAME
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP730
|
||||
# ifdef OMAP_NAME
|
||||
# undef MULTI_OMAP1
|
||||
# define MULTI_OMAP1
|
||||
# else
|
||||
# define OMAP_NAME omap730
|
||||
# endif
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_OMAP850
|
||||
# ifdef OMAP_NAME
|
||||
# undef MULTI_OMAP1
|
||||
# define MULTI_OMAP1
|
||||
# else
|
||||
# define OMAP_NAME omap850
|
||||
# endif
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_OMAP15XX
|
||||
# ifdef OMAP_NAME
|
||||
# undef MULTI_OMAP1
|
||||
# define MULTI_OMAP1
|
||||
# else
|
||||
# define OMAP_NAME omap1510
|
||||
# endif
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_OMAP16XX
|
||||
# ifdef OMAP_NAME
|
||||
# undef MULTI_OMAP1
|
||||
# define MULTI_OMAP1
|
||||
# else
|
||||
# define OMAP_NAME omap16xx
|
||||
# endif
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_OMAP2PLUS
|
||||
# if (defined(OMAP_NAME) || defined(MULTI_OMAP1))
|
||||
# error "OMAP1 and OMAP2PLUS can't be selected at the same time"
|
||||
# endif
|
||||
#endif
|
||||
#ifdef CONFIG_SOC_OMAP2420
|
||||
# ifdef OMAP_NAME
|
||||
# undef MULTI_OMAP2
|
||||
# define MULTI_OMAP2
|
||||
# else
|
||||
# define OMAP_NAME omap2420
|
||||
# endif
|
||||
#endif
|
||||
#ifdef CONFIG_SOC_OMAP2430
|
||||
# ifdef OMAP_NAME
|
||||
# undef MULTI_OMAP2
|
||||
# define MULTI_OMAP2
|
||||
# else
|
||||
# define OMAP_NAME omap2430
|
||||
# endif
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_OMAP3
|
||||
# ifdef OMAP_NAME
|
||||
# undef MULTI_OMAP2
|
||||
# define MULTI_OMAP2
|
||||
# else
|
||||
# define OMAP_NAME omap3
|
||||
# endif
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_OMAP4
|
||||
# ifdef OMAP_NAME
|
||||
# undef MULTI_OMAP2
|
||||
# define MULTI_OMAP2
|
||||
# else
|
||||
# define OMAP_NAME omap4
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SOC_OMAP5
|
||||
# ifdef OMAP_NAME
|
||||
# undef MULTI_OMAP2
|
||||
# define MULTI_OMAP2
|
||||
# else
|
||||
# define OMAP_NAME omap5
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SOC_AM33XX
|
||||
# ifdef OMAP_NAME
|
||||
# undef MULTI_OMAP2
|
||||
# define MULTI_OMAP2
|
||||
# else
|
||||
# define OMAP_NAME am33xx
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif /* __PLAT_OMAP_MULTI_H */
|
@@ -1,352 +0,0 @@
|
||||
/*
|
||||
* omap-pm.h - OMAP power management interface
|
||||
*
|
||||
* Copyright (C) 2008-2010 Texas Instruments, Inc.
|
||||
* Copyright (C) 2008-2010 Nokia Corporation
|
||||
* Paul Walmsley
|
||||
*
|
||||
* Interface developed by (in alphabetical order): Karthik Dasu, Jouni
|
||||
* Högander, Tony Lindgren, Rajendra Nayak, Sakari Poussa,
|
||||
* Veeramanikandan Raju, Anand Sawant, Igor Stoppa, Paul Walmsley,
|
||||
* Richard Woodruff
|
||||
*/
|
||||
|
||||
#ifndef ASM_ARM_ARCH_OMAP_OMAP_PM_H
|
||||
#define ASM_ARM_ARCH_OMAP_OMAP_PM_H
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/cpufreq.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/opp.h>
|
||||
|
||||
/*
|
||||
* agent_id values for use with omap_pm_set_min_bus_tput():
|
||||
*
|
||||
* OCP_INITIATOR_AGENT is only valid for devices that can act as
|
||||
* initiators -- it represents the device's L3 interconnect
|
||||
* connection. OCP_TARGET_AGENT represents the device's L4
|
||||
* interconnect connection.
|
||||
*/
|
||||
#define OCP_TARGET_AGENT 1
|
||||
#define OCP_INITIATOR_AGENT 2
|
||||
|
||||
/**
|
||||
* omap_pm_if_early_init - OMAP PM init code called before clock fw init
|
||||
* @mpu_opp_table: array ptr to struct omap_opp for MPU
|
||||
* @dsp_opp_table: array ptr to struct omap_opp for DSP
|
||||
* @l3_opp_table : array ptr to struct omap_opp for CORE
|
||||
*
|
||||
* Initialize anything that must be configured before the clock
|
||||
* framework starts. The "_if_" is to avoid name collisions with the
|
||||
* PM idle-loop code.
|
||||
*/
|
||||
int __init omap_pm_if_early_init(void);
|
||||
|
||||
/**
|
||||
* omap_pm_if_init - OMAP PM init code called after clock fw init
|
||||
*
|
||||
* The main initialization code. OPP tables are passed in here. The
|
||||
* "_if_" is to avoid name collisions with the PM idle-loop code.
|
||||
*/
|
||||
int __init omap_pm_if_init(void);
|
||||
|
||||
/**
|
||||
* omap_pm_if_exit - OMAP PM exit code
|
||||
*
|
||||
* Exit code; currently unused. The "_if_" is to avoid name
|
||||
* collisions with the PM idle-loop code.
|
||||
*/
|
||||
void omap_pm_if_exit(void);
|
||||
|
||||
/*
|
||||
* Device-driver-originated constraints (via board-*.c files, platform_data)
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* omap_pm_set_max_mpu_wakeup_lat - set the maximum MPU wakeup latency
|
||||
* @dev: struct device * requesting the constraint
|
||||
* @t: maximum MPU wakeup latency in microseconds
|
||||
*
|
||||
* Request that the maximum interrupt latency for the MPU to be no
|
||||
* greater than @t microseconds. "Interrupt latency" in this case is
|
||||
* defined as the elapsed time from the occurrence of a hardware or
|
||||
* timer interrupt to the time when the device driver's interrupt
|
||||
* service routine has been entered by the MPU.
|
||||
*
|
||||
* It is intended that underlying PM code will use this information to
|
||||
* determine what power state to put the MPU powerdomain into, and
|
||||
* possibly the CORE powerdomain as well, since interrupt handling
|
||||
* code currently runs from SDRAM. Advanced PM or board*.c code may
|
||||
* also configure interrupt controller priorities, OCP bus priorities,
|
||||
* CPU speed(s), etc.
|
||||
*
|
||||
* This function will not affect device wakeup latency, e.g., time
|
||||
* elapsed from when a device driver enables a hardware device with
|
||||
* clk_enable(), to when the device is ready for register access or
|
||||
* other use. To control this device wakeup latency, use
|
||||
* omap_pm_set_max_dev_wakeup_lat()
|
||||
*
|
||||
* Multiple calls to omap_pm_set_max_mpu_wakeup_lat() will replace the
|
||||
* previous t value. To remove the latency target for the MPU, call
|
||||
* with t = -1.
|
||||
*
|
||||
* XXX This constraint will be deprecated soon in favor of the more
|
||||
* general omap_pm_set_max_dev_wakeup_lat()
|
||||
*
|
||||
* Returns -EINVAL for an invalid argument, -ERANGE if the constraint
|
||||
* is not satisfiable, or 0 upon success.
|
||||
*/
|
||||
int omap_pm_set_max_mpu_wakeup_lat(struct device *dev, long t);
|
||||
|
||||
|
||||
/**
|
||||
* omap_pm_set_min_bus_tput - set minimum bus throughput needed by device
|
||||
* @dev: struct device * requesting the constraint
|
||||
* @tbus_id: interconnect to operate on (OCP_{INITIATOR,TARGET}_AGENT)
|
||||
* @r: minimum throughput (in KiB/s)
|
||||
*
|
||||
* Request that the minimum data throughput on the OCP interconnect
|
||||
* attached to device @dev interconnect agent @tbus_id be no less
|
||||
* than @r KiB/s.
|
||||
*
|
||||
* It is expected that the OMAP PM or bus code will use this
|
||||
* information to set the interconnect clock to run at the lowest
|
||||
* possible speed that satisfies all current system users. The PM or
|
||||
* bus code will adjust the estimate based on its model of the bus, so
|
||||
* device driver authors should attempt to specify an accurate
|
||||
* quantity for their device use case, and let the PM or bus code
|
||||
* overestimate the numbers as necessary to handle request/response
|
||||
* latency, other competing users on the system, etc. On OMAP2/3, if
|
||||
* a driver requests a minimum L4 interconnect speed constraint, the
|
||||
* code will also need to add an minimum L3 interconnect speed
|
||||
* constraint,
|
||||
*
|
||||
* Multiple calls to omap_pm_set_min_bus_tput() will replace the
|
||||
* previous rate value for this device. To remove the interconnect
|
||||
* throughput restriction for this device, call with r = 0.
|
||||
*
|
||||
* Returns -EINVAL for an invalid argument, -ERANGE if the constraint
|
||||
* is not satisfiable, or 0 upon success.
|
||||
*/
|
||||
int omap_pm_set_min_bus_tput(struct device *dev, u8 agent_id, unsigned long r);
|
||||
|
||||
|
||||
/**
|
||||
* omap_pm_set_max_dev_wakeup_lat - set the maximum device enable latency
|
||||
* @req_dev: struct device * requesting the constraint, or NULL if none
|
||||
* @dev: struct device * to set the constraint one
|
||||
* @t: maximum device wakeup latency in microseconds
|
||||
*
|
||||
* Request that the maximum amount of time necessary for a device @dev
|
||||
* to become accessible after its clocks are enabled should be no
|
||||
* greater than @t microseconds. Specifically, this represents the
|
||||
* time from when a device driver enables device clocks with
|
||||
* clk_enable(), to when the register reads and writes on the device
|
||||
* will succeed. This function should be called before clk_disable()
|
||||
* is called, since the power state transition decision may be made
|
||||
* during clk_disable().
|
||||
*
|
||||
* It is intended that underlying PM code will use this information to
|
||||
* determine what power state to put the powerdomain enclosing this
|
||||
* device into.
|
||||
*
|
||||
* Multiple calls to omap_pm_set_max_dev_wakeup_lat() will replace the
|
||||
* previous wakeup latency values for this device. To remove the
|
||||
* wakeup latency restriction for this device, call with t = -1.
|
||||
*
|
||||
* Returns -EINVAL for an invalid argument, -ERANGE if the constraint
|
||||
* is not satisfiable, or 0 upon success.
|
||||
*/
|
||||
int omap_pm_set_max_dev_wakeup_lat(struct device *req_dev, struct device *dev,
|
||||
long t);
|
||||
|
||||
|
||||
/**
|
||||
* omap_pm_set_max_sdma_lat - set the maximum system DMA transfer start latency
|
||||
* @dev: struct device *
|
||||
* @t: maximum DMA transfer start latency in microseconds
|
||||
*
|
||||
* Request that the maximum system DMA transfer start latency for this
|
||||
* device 'dev' should be no greater than 't' microseconds. "DMA
|
||||
* transfer start latency" here is defined as the elapsed time from
|
||||
* when a device (e.g., McBSP) requests that a system DMA transfer
|
||||
* start or continue, to the time at which data starts to flow into
|
||||
* that device from the system DMA controller.
|
||||
*
|
||||
* It is intended that underlying PM code will use this information to
|
||||
* determine what power state to put the CORE powerdomain into.
|
||||
*
|
||||
* Since system DMA transfers may not involve the MPU, this function
|
||||
* will not affect MPU wakeup latency. Use set_max_cpu_lat() to do
|
||||
* so. Similarly, this function will not affect device wakeup latency
|
||||
* -- use set_max_dev_wakeup_lat() to affect that.
|
||||
*
|
||||
* Multiple calls to set_max_sdma_lat() will replace the previous t
|
||||
* value for this device. To remove the maximum DMA latency for this
|
||||
* device, call with t = -1.
|
||||
*
|
||||
* Returns -EINVAL for an invalid argument, -ERANGE if the constraint
|
||||
* is not satisfiable, or 0 upon success.
|
||||
*/
|
||||
int omap_pm_set_max_sdma_lat(struct device *dev, long t);
|
||||
|
||||
|
||||
/**
|
||||
* omap_pm_set_min_clk_rate - set minimum clock rate requested by @dev
|
||||
* @dev: struct device * requesting the constraint
|
||||
* @clk: struct clk * to set the minimum rate constraint on
|
||||
* @r: minimum rate in Hz
|
||||
*
|
||||
* Request that the minimum clock rate on the device @dev's clk @clk
|
||||
* be no less than @r Hz.
|
||||
*
|
||||
* It is expected that the OMAP PM code will use this information to
|
||||
* find an OPP or clock setting that will satisfy this clock rate
|
||||
* constraint, along with any other applicable system constraints on
|
||||
* the clock rate or corresponding voltage, etc.
|
||||
*
|
||||
* omap_pm_set_min_clk_rate() differs from the clock code's
|
||||
* clk_set_rate() in that it considers other constraints before taking
|
||||
* any hardware action, and may change a system OPP rather than just a
|
||||
* clock rate. clk_set_rate() is intended to be a low-level
|
||||
* interface.
|
||||
*
|
||||
* omap_pm_set_min_clk_rate() is easily open to abuse. A better API
|
||||
* would be something like "omap_pm_set_min_dev_performance()";
|
||||
* however, there is no easily-generalizable concept of performance
|
||||
* that applies to all devices. Only a device (and possibly the
|
||||
* device subsystem) has both the subsystem-specific knowledge, and
|
||||
* the hardware IP block-specific knowledge, to translate a constraint
|
||||
* on "touchscreen sampling accuracy" or "number of pixels or polygons
|
||||
* rendered per second" to a clock rate. This translation can be
|
||||
* dependent on the hardware IP block's revision, or firmware version,
|
||||
* and the driver is the only code on the system that has this
|
||||
* information and can know how to translate that into a clock rate.
|
||||
*
|
||||
* The intended use-case for this function is for userspace or other
|
||||
* kernel code to communicate a particular performance requirement to
|
||||
* a subsystem; then for the subsystem to communicate that requirement
|
||||
* to something that is meaningful to the device driver; then for the
|
||||
* device driver to convert that requirement to a clock rate, and to
|
||||
* then call omap_pm_set_min_clk_rate().
|
||||
*
|
||||
* Users of this function (such as device drivers) should not simply
|
||||
* call this function with some high clock rate to ensure "high
|
||||
* performance." Rather, the device driver should take a performance
|
||||
* constraint from its subsystem, such as "render at least X polygons
|
||||
* per second," and use some formula or table to convert that into a
|
||||
* clock rate constraint given the hardware type and hardware
|
||||
* revision. Device drivers or subsystems should not assume that they
|
||||
* know how to make a power/performance tradeoff - some device use
|
||||
* cases may tolerate a lower-fidelity device function for lower power
|
||||
* consumption; others may demand a higher-fidelity device function,
|
||||
* no matter what the power consumption.
|
||||
*
|
||||
* Multiple calls to omap_pm_set_min_clk_rate() will replace the
|
||||
* previous rate value for the device @dev. To remove the minimum clock
|
||||
* rate constraint for the device, call with r = 0.
|
||||
*
|
||||
* Returns -EINVAL for an invalid argument, -ERANGE if the constraint
|
||||
* is not satisfiable, or 0 upon success.
|
||||
*/
|
||||
int omap_pm_set_min_clk_rate(struct device *dev, struct clk *c, long r);
|
||||
|
||||
/*
|
||||
* DSP Bridge-specific constraints
|
||||
*/
|
||||
|
||||
/**
|
||||
* omap_pm_dsp_get_opp_table - get OPP->DSP clock frequency table
|
||||
*
|
||||
* Intended for use by DSPBridge. Returns an array of OPP->DSP clock
|
||||
* frequency entries. The final item in the array should have .rate =
|
||||
* .opp_id = 0.
|
||||
*/
|
||||
const struct omap_opp *omap_pm_dsp_get_opp_table(void);
|
||||
|
||||
/**
|
||||
* omap_pm_dsp_set_min_opp - receive desired OPP target ID from DSP Bridge
|
||||
* @opp_id: target DSP OPP ID
|
||||
*
|
||||
* Set a minimum OPP ID for the DSP. This is intended to be called
|
||||
* only from the DSP Bridge MPU-side driver. Unfortunately, the only
|
||||
* information that code receives from the DSP/BIOS load estimator is the
|
||||
* target OPP ID; hence, this interface. No return value.
|
||||
*/
|
||||
void omap_pm_dsp_set_min_opp(u8 opp_id);
|
||||
|
||||
/**
|
||||
* omap_pm_dsp_get_opp - report the current DSP OPP ID
|
||||
*
|
||||
* Report the current OPP for the DSP. Since on OMAP3, the DSP and
|
||||
* MPU share a single voltage domain, the OPP ID returned back may
|
||||
* represent a higher DSP speed than the OPP requested via
|
||||
* omap_pm_dsp_set_min_opp().
|
||||
*
|
||||
* Returns the current VDD1 OPP ID, or 0 upon error.
|
||||
*/
|
||||
u8 omap_pm_dsp_get_opp(void);
|
||||
|
||||
|
||||
/*
|
||||
* CPUFreq-originated constraint
|
||||
*
|
||||
* In the future, this should be handled by custom OPP clocktype
|
||||
* functions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* omap_pm_cpu_get_freq_table - return a cpufreq_frequency_table array ptr
|
||||
*
|
||||
* Provide a frequency table usable by CPUFreq for the current chip/board.
|
||||
* Returns a pointer to a struct cpufreq_frequency_table array or NULL
|
||||
* upon error.
|
||||
*/
|
||||
struct cpufreq_frequency_table **omap_pm_cpu_get_freq_table(void);
|
||||
|
||||
/**
|
||||
* omap_pm_cpu_set_freq - set the current minimum MPU frequency
|
||||
* @f: MPU frequency in Hz
|
||||
*
|
||||
* Set the current minimum CPU frequency. The actual CPU frequency
|
||||
* used could end up higher if the DSP requested a higher OPP.
|
||||
* Intended to be called by plat-omap/cpu_omap.c:omap_target(). No
|
||||
* return value.
|
||||
*/
|
||||
void omap_pm_cpu_set_freq(unsigned long f);
|
||||
|
||||
/**
|
||||
* omap_pm_cpu_get_freq - report the current CPU frequency
|
||||
*
|
||||
* Returns the current MPU frequency, or 0 upon error.
|
||||
*/
|
||||
unsigned long omap_pm_cpu_get_freq(void);
|
||||
|
||||
|
||||
/*
|
||||
* Device context loss tracking
|
||||
*/
|
||||
|
||||
/**
|
||||
* omap_pm_get_dev_context_loss_count - return count of times dev has lost ctx
|
||||
* @dev: struct device *
|
||||
*
|
||||
* This function returns the number of times that the device @dev has
|
||||
* lost its internal context. This generally occurs on a powerdomain
|
||||
* transition to OFF. Drivers use this as an optimization to avoid restoring
|
||||
* context if the device hasn't lost it. To use, drivers should initially
|
||||
* call this in their context save functions and store the result. Early in
|
||||
* the driver's context restore function, the driver should call this function
|
||||
* again, and compare the result to the stored counter. If they differ, the
|
||||
* driver must restore device context. If the number of context losses
|
||||
* exceeds the maximum positive integer, the function will wrap to 0 and
|
||||
* continue counting. Returns the number of context losses for this device,
|
||||
* or negative value upon error.
|
||||
*/
|
||||
int omap_pm_get_dev_context_loss_count(struct device *dev);
|
||||
|
||||
void omap_pm_enable_off_mode(void);
|
||||
void omap_pm_disable_off_mode(void);
|
||||
|
||||
#endif
|
@@ -1,14 +0,0 @@
|
||||
#ifndef __OMAP_SECURE_H__
|
||||
#define __OMAP_SECURE_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
extern int omap_secure_ram_reserve_memblock(void);
|
||||
|
||||
#ifdef CONFIG_OMAP4_ERRATA_I688
|
||||
extern int omap_barrier_reserve_memblock(void);
|
||||
#else
|
||||
static inline void omap_barrier_reserve_memblock(void)
|
||||
{ }
|
||||
#endif
|
||||
#endif /* __OMAP_SECURE_H__ */
|
@@ -1,176 +0,0 @@
|
||||
/*
|
||||
* omap_device headers
|
||||
*
|
||||
* Copyright (C) 2009 Nokia Corporation
|
||||
* Paul Walmsley
|
||||
*
|
||||
* Developed in collaboration with (alphabetical order): Benoit
|
||||
* Cousson, Kevin Hilman, Tony Lindgren, Rajendra Nayak, Vikram
|
||||
* Pandita, Sakari Poussa, Anand Sawant, Santosh Shilimkar, Richard
|
||||
* Woodruff
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Eventually this type of functionality should either be
|
||||
* a) implemented via arch-specific pointers in platform_device
|
||||
* or
|
||||
* b) implemented as a proper omap_bus/omap_device in Linux, no more
|
||||
* platform_device
|
||||
*
|
||||
* omap_device differs from omap_hwmod in that it includes external
|
||||
* (e.g., board- and system-level) integration details. omap_hwmod
|
||||
* stores hardware data that is invariant for a given OMAP chip.
|
||||
*
|
||||
* To do:
|
||||
* - GPIO integration
|
||||
* - regulator integration
|
||||
*
|
||||
*/
|
||||
#ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H
|
||||
#define __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <plat/omap_hwmod.h>
|
||||
|
||||
extern struct dev_pm_domain omap_device_pm_domain;
|
||||
|
||||
/* omap_device._state values */
|
||||
#define OMAP_DEVICE_STATE_UNKNOWN 0
|
||||
#define OMAP_DEVICE_STATE_ENABLED 1
|
||||
#define OMAP_DEVICE_STATE_IDLE 2
|
||||
#define OMAP_DEVICE_STATE_SHUTDOWN 3
|
||||
|
||||
/* omap_device.flags values */
|
||||
#define OMAP_DEVICE_SUSPENDED BIT(0)
|
||||
#define OMAP_DEVICE_NO_IDLE_ON_SUSPEND BIT(1)
|
||||
|
||||
/**
|
||||
* struct omap_device - omap_device wrapper for platform_devices
|
||||
* @pdev: platform_device
|
||||
* @hwmods: (one .. many per omap_device)
|
||||
* @hwmods_cnt: ARRAY_SIZE() of @hwmods
|
||||
* @pm_lats: ptr to an omap_device_pm_latency table
|
||||
* @pm_lats_cnt: ARRAY_SIZE() of what is passed to @pm_lats
|
||||
* @pm_lat_level: array index of the last odpl entry executed - -1 if never
|
||||
* @dev_wakeup_lat: dev wakeup latency in nanoseconds
|
||||
* @_dev_wakeup_lat_limit: dev wakeup latency limit in nsec - set by OMAP PM
|
||||
* @_state: one of OMAP_DEVICE_STATE_* (see above)
|
||||
* @flags: device flags
|
||||
* @_driver_status: one of BUS_NOTIFY_*_DRIVER from <linux/device.h>
|
||||
*
|
||||
* Integrates omap_hwmod data into Linux platform_device.
|
||||
*
|
||||
* Field names beginning with underscores are for the internal use of
|
||||
* the omap_device code.
|
||||
*
|
||||
*/
|
||||
struct omap_device {
|
||||
struct platform_device *pdev;
|
||||
struct omap_hwmod **hwmods;
|
||||
struct omap_device_pm_latency *pm_lats;
|
||||
u32 dev_wakeup_lat;
|
||||
u32 _dev_wakeup_lat_limit;
|
||||
unsigned long _driver_status;
|
||||
u8 pm_lats_cnt;
|
||||
s8 pm_lat_level;
|
||||
u8 hwmods_cnt;
|
||||
u8 _state;
|
||||
u8 flags;
|
||||
};
|
||||
|
||||
/* Device driver interface (call via platform_data fn ptrs) */
|
||||
|
||||
int omap_device_enable(struct platform_device *pdev);
|
||||
int omap_device_idle(struct platform_device *pdev);
|
||||
int omap_device_shutdown(struct platform_device *pdev);
|
||||
|
||||
/* Core code interface */
|
||||
|
||||
struct platform_device *omap_device_build(const char *pdev_name, int pdev_id,
|
||||
struct omap_hwmod *oh, void *pdata,
|
||||
int pdata_len,
|
||||
struct omap_device_pm_latency *pm_lats,
|
||||
int pm_lats_cnt, int is_early_device);
|
||||
|
||||
struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id,
|
||||
struct omap_hwmod **oh, int oh_cnt,
|
||||
void *pdata, int pdata_len,
|
||||
struct omap_device_pm_latency *pm_lats,
|
||||
int pm_lats_cnt, int is_early_device);
|
||||
|
||||
struct omap_device *omap_device_alloc(struct platform_device *pdev,
|
||||
struct omap_hwmod **ohs, int oh_cnt,
|
||||
struct omap_device_pm_latency *pm_lats,
|
||||
int pm_lats_cnt);
|
||||
void omap_device_delete(struct omap_device *od);
|
||||
int omap_device_register(struct platform_device *pdev);
|
||||
|
||||
void __iomem *omap_device_get_rt_va(struct omap_device *od);
|
||||
struct device *omap_device_get_by_hwmod_name(const char *oh_name);
|
||||
|
||||
/* OMAP PM interface */
|
||||
int omap_device_align_pm_lat(struct platform_device *pdev,
|
||||
u32 new_wakeup_lat_limit);
|
||||
struct powerdomain *omap_device_get_pwrdm(struct omap_device *od);
|
||||
int omap_device_get_context_loss_count(struct platform_device *pdev);
|
||||
|
||||
/* Other */
|
||||
|
||||
int omap_device_assert_hardreset(struct platform_device *pdev,
|
||||
const char *name);
|
||||
int omap_device_deassert_hardreset(struct platform_device *pdev,
|
||||
const char *name);
|
||||
int omap_device_idle_hwmods(struct omap_device *od);
|
||||
int omap_device_enable_hwmods(struct omap_device *od);
|
||||
|
||||
int omap_device_disable_clocks(struct omap_device *od);
|
||||
int omap_device_enable_clocks(struct omap_device *od);
|
||||
|
||||
/*
|
||||
* Entries should be kept in latency order ascending
|
||||
*
|
||||
* deact_lat is the maximum number of microseconds required to complete
|
||||
* deactivate_func() at the device's slowest OPP.
|
||||
*
|
||||
* act_lat is the maximum number of microseconds required to complete
|
||||
* activate_func() at the device's slowest OPP.
|
||||
*
|
||||
* This will result in some suboptimal power management decisions at fast
|
||||
* OPPs, but avoids having to recompute all device power management decisions
|
||||
* if the system shifts from a fast OPP to a slow OPP (in order to meet
|
||||
* latency requirements).
|
||||
*
|
||||
* XXX should deactivate_func/activate_func() take platform_device pointers
|
||||
* rather than omap_device pointers?
|
||||
*/
|
||||
struct omap_device_pm_latency {
|
||||
u32 deactivate_lat;
|
||||
u32 deactivate_lat_worst;
|
||||
int (*deactivate_func)(struct omap_device *od);
|
||||
u32 activate_lat;
|
||||
u32 activate_lat_worst;
|
||||
int (*activate_func)(struct omap_device *od);
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
#define OMAP_DEVICE_LATENCY_AUTO_ADJUST BIT(1)
|
||||
|
||||
/* Get omap_device pointer from platform_device pointer */
|
||||
static inline struct omap_device *to_omap_device(struct platform_device *pdev)
|
||||
{
|
||||
return pdev ? pdev->archdata.od : NULL;
|
||||
}
|
||||
|
||||
static inline
|
||||
void omap_device_disable_idle_on_suspend(struct platform_device *pdev)
|
||||
{
|
||||
struct omap_device *od = to_omap_device(pdev);
|
||||
|
||||
od->flags |= OMAP_DEVICE_NO_IDLE_ON_SUSPEND;
|
||||
}
|
||||
|
||||
#endif
|
@@ -1,676 +0,0 @@
|
||||
/*
|
||||
* omap_hwmod macros, structures
|
||||
*
|
||||
* Copyright (C) 2009-2011 Nokia Corporation
|
||||
* Copyright (C) 2012 Texas Instruments, Inc.
|
||||
* Paul Walmsley
|
||||
*
|
||||
* Created in collaboration with (alphabetical order): Benoît Cousson,
|
||||
* Kevin Hilman, Tony Lindgren, Rajendra Nayak, Vikram Pandita, Sakari
|
||||
* Poussa, Anand Sawant, Santosh Shilimkar, Richard Woodruff
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* These headers and macros are used to define OMAP on-chip module
|
||||
* data and their integration with other OMAP modules and Linux.
|
||||
* Copious documentation and references can also be found in the
|
||||
* omap_hwmod code, in arch/arm/mach-omap2/omap_hwmod.c (as of this
|
||||
* writing).
|
||||
*
|
||||
* To do:
|
||||
* - add interconnect error log structures
|
||||
* - add pinmuxing
|
||||
* - init_conn_id_bit (CONNID_BIT_VECTOR)
|
||||
* - implement default hwmod SMS/SDRC flags?
|
||||
* - move Linux-specific data ("non-ROM data") out
|
||||
*
|
||||
*/
|
||||
#ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_HWMOD_H
|
||||
#define __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_HWMOD_H
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <plat/cpu.h>
|
||||
|
||||
struct omap_device;
|
||||
|
||||
extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type1;
|
||||
extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2;
|
||||
extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type3;
|
||||
|
||||
/*
|
||||
* OCP SYSCONFIG bit shifts/masks TYPE1. These are for IPs compliant
|
||||
* with the original PRCM protocol defined for OMAP2420
|
||||
*/
|
||||
#define SYSC_TYPE1_MIDLEMODE_SHIFT 12
|
||||
#define SYSC_TYPE1_MIDLEMODE_MASK (0x3 << SYSC_TYPE1_MIDLEMODE_SHIFT)
|
||||
#define SYSC_TYPE1_CLOCKACTIVITY_SHIFT 8
|
||||
#define SYSC_TYPE1_CLOCKACTIVITY_MASK (0x3 << SYSC_TYPE1_CLOCKACTIVITY_SHIFT)
|
||||
#define SYSC_TYPE1_SIDLEMODE_SHIFT 3
|
||||
#define SYSC_TYPE1_SIDLEMODE_MASK (0x3 << SYSC_TYPE1_SIDLEMODE_SHIFT)
|
||||
#define SYSC_TYPE1_ENAWAKEUP_SHIFT 2
|
||||
#define SYSC_TYPE1_ENAWAKEUP_MASK (1 << SYSC_TYPE1_ENAWAKEUP_SHIFT)
|
||||
#define SYSC_TYPE1_SOFTRESET_SHIFT 1
|
||||
#define SYSC_TYPE1_SOFTRESET_MASK (1 << SYSC_TYPE1_SOFTRESET_SHIFT)
|
||||
#define SYSC_TYPE1_AUTOIDLE_SHIFT 0
|
||||
#define SYSC_TYPE1_AUTOIDLE_MASK (1 << SYSC_TYPE1_AUTOIDLE_SHIFT)
|
||||
|
||||
/*
|
||||
* OCP SYSCONFIG bit shifts/masks TYPE2. These are for IPs compliant
|
||||
* with the new PRCM protocol defined for new OMAP4 IPs.
|
||||
*/
|
||||
#define SYSC_TYPE2_SOFTRESET_SHIFT 0
|
||||
#define SYSC_TYPE2_SOFTRESET_MASK (1 << SYSC_TYPE2_SOFTRESET_SHIFT)
|
||||
#define SYSC_TYPE2_SIDLEMODE_SHIFT 2
|
||||
#define SYSC_TYPE2_SIDLEMODE_MASK (0x3 << SYSC_TYPE2_SIDLEMODE_SHIFT)
|
||||
#define SYSC_TYPE2_MIDLEMODE_SHIFT 4
|
||||
#define SYSC_TYPE2_MIDLEMODE_MASK (0x3 << SYSC_TYPE2_MIDLEMODE_SHIFT)
|
||||
#define SYSC_TYPE2_DMADISABLE_SHIFT 16
|
||||
#define SYSC_TYPE2_DMADISABLE_MASK (0x1 << SYSC_TYPE2_DMADISABLE_SHIFT)
|
||||
|
||||
/*
|
||||
* OCP SYSCONFIG bit shifts/masks TYPE3.
|
||||
* This is applicable for some IPs present in AM33XX
|
||||
*/
|
||||
#define SYSC_TYPE3_SIDLEMODE_SHIFT 0
|
||||
#define SYSC_TYPE3_SIDLEMODE_MASK (0x3 << SYSC_TYPE3_SIDLEMODE_SHIFT)
|
||||
#define SYSC_TYPE3_MIDLEMODE_SHIFT 2
|
||||
#define SYSC_TYPE3_MIDLEMODE_MASK (0x3 << SYSC_TYPE3_MIDLEMODE_SHIFT)
|
||||
|
||||
/* OCP SYSSTATUS bit shifts/masks */
|
||||
#define SYSS_RESETDONE_SHIFT 0
|
||||
#define SYSS_RESETDONE_MASK (1 << SYSS_RESETDONE_SHIFT)
|
||||
|
||||
/* Master standby/slave idle mode flags */
|
||||
#define HWMOD_IDLEMODE_FORCE (1 << 0)
|
||||
#define HWMOD_IDLEMODE_NO (1 << 1)
|
||||
#define HWMOD_IDLEMODE_SMART (1 << 2)
|
||||
#define HWMOD_IDLEMODE_SMART_WKUP (1 << 3)
|
||||
|
||||
/* modulemode control type (SW or HW) */
|
||||
#define MODULEMODE_HWCTRL 1
|
||||
#define MODULEMODE_SWCTRL 2
|
||||
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_mux_info - hwmod specific mux configuration
|
||||
* @pads: array of omap_device_pad entries
|
||||
* @nr_pads: number of omap_device_pad entries
|
||||
*
|
||||
* Note that this is currently built during init as needed.
|
||||
*/
|
||||
struct omap_hwmod_mux_info {
|
||||
int nr_pads;
|
||||
struct omap_device_pad *pads;
|
||||
int nr_pads_dynamic;
|
||||
struct omap_device_pad **pads_dynamic;
|
||||
int *irqs;
|
||||
bool enabled;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_irq_info - MPU IRQs used by the hwmod
|
||||
* @name: name of the IRQ channel (module local name)
|
||||
* @irq: IRQ channel ID (should be non-negative except -1 = terminator)
|
||||
*
|
||||
* @name should be something short, e.g., "tx" or "rx". It is for use
|
||||
* by platform_get_resource_byname(). It is defined locally to the
|
||||
* hwmod.
|
||||
*/
|
||||
struct omap_hwmod_irq_info {
|
||||
const char *name;
|
||||
s16 irq;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_dma_info - DMA channels used by the hwmod
|
||||
* @name: name of the DMA channel (module local name)
|
||||
* @dma_req: DMA request ID (should be non-negative except -1 = terminator)
|
||||
*
|
||||
* @name should be something short, e.g., "tx" or "rx". It is for use
|
||||
* by platform_get_resource_byname(). It is defined locally to the
|
||||
* hwmod.
|
||||
*/
|
||||
struct omap_hwmod_dma_info {
|
||||
const char *name;
|
||||
s16 dma_req;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_rst_info - IPs reset lines use by hwmod
|
||||
* @name: name of the reset line (module local name)
|
||||
* @rst_shift: Offset of the reset bit
|
||||
* @st_shift: Offset of the reset status bit (OMAP2/3 only)
|
||||
*
|
||||
* @name should be something short, e.g., "cpu0" or "rst". It is defined
|
||||
* locally to the hwmod.
|
||||
*/
|
||||
struct omap_hwmod_rst_info {
|
||||
const char *name;
|
||||
u8 rst_shift;
|
||||
u8 st_shift;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_opt_clk - optional clocks used by this hwmod
|
||||
* @role: "sys", "32k", "tv", etc -- for use in clk_get()
|
||||
* @clk: opt clock: OMAP clock name
|
||||
* @_clk: pointer to the struct clk (filled in at runtime)
|
||||
*
|
||||
* The module's interface clock and main functional clock should not
|
||||
* be added as optional clocks.
|
||||
*/
|
||||
struct omap_hwmod_opt_clk {
|
||||
const char *role;
|
||||
const char *clk;
|
||||
struct clk *_clk;
|
||||
};
|
||||
|
||||
|
||||
/* omap_hwmod_omap2_firewall.flags bits */
|
||||
#define OMAP_FIREWALL_L3 (1 << 0)
|
||||
#define OMAP_FIREWALL_L4 (1 << 1)
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_omap2_firewall - OMAP2/3 device firewall data
|
||||
* @l3_perm_bit: bit shift for L3_PM_*_PERMISSION_*
|
||||
* @l4_fw_region: L4 firewall region ID
|
||||
* @l4_prot_group: L4 protection group ID
|
||||
* @flags: (see omap_hwmod_omap2_firewall.flags macros above)
|
||||
*/
|
||||
struct omap_hwmod_omap2_firewall {
|
||||
u8 l3_perm_bit;
|
||||
u8 l4_fw_region;
|
||||
u8 l4_prot_group;
|
||||
u8 flags;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* omap_hwmod_addr_space.flags bits
|
||||
*
|
||||
* ADDR_MAP_ON_INIT: Map this address space during omap_hwmod init.
|
||||
* ADDR_TYPE_RT: Address space contains module register target data.
|
||||
*/
|
||||
#define ADDR_MAP_ON_INIT (1 << 0) /* XXX does not belong */
|
||||
#define ADDR_TYPE_RT (1 << 1)
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_addr_space - address space handled by the hwmod
|
||||
* @name: name of the address space
|
||||
* @pa_start: starting physical address
|
||||
* @pa_end: ending physical address
|
||||
* @flags: (see omap_hwmod_addr_space.flags macros above)
|
||||
*
|
||||
* Address space doesn't necessarily follow physical interconnect
|
||||
* structure. GPMC is one example.
|
||||
*/
|
||||
struct omap_hwmod_addr_space {
|
||||
const char *name;
|
||||
u32 pa_start;
|
||||
u32 pa_end;
|
||||
u8 flags;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* omap_hwmod_ocp_if.user bits: these indicate the initiators that use this
|
||||
* interface to interact with the hwmod. Used to add sleep dependencies
|
||||
* when the module is enabled or disabled.
|
||||
*/
|
||||
#define OCP_USER_MPU (1 << 0)
|
||||
#define OCP_USER_SDMA (1 << 1)
|
||||
#define OCP_USER_DSP (1 << 2)
|
||||
#define OCP_USER_IVA (1 << 3)
|
||||
|
||||
/* omap_hwmod_ocp_if.flags bits */
|
||||
#define OCPIF_SWSUP_IDLE (1 << 0)
|
||||
#define OCPIF_CAN_BURST (1 << 1)
|
||||
|
||||
/* omap_hwmod_ocp_if._int_flags possibilities */
|
||||
#define _OCPIF_INT_FLAGS_REGISTERED (1 << 0)
|
||||
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_ocp_if - OCP interface data
|
||||
* @master: struct omap_hwmod that initiates OCP transactions on this link
|
||||
* @slave: struct omap_hwmod that responds to OCP transactions on this link
|
||||
* @addr: address space associated with this link
|
||||
* @clk: interface clock: OMAP clock name
|
||||
* @_clk: pointer to the interface struct clk (filled in at runtime)
|
||||
* @fw: interface firewall data
|
||||
* @width: OCP data width
|
||||
* @user: initiators using this interface (see OCP_USER_* macros above)
|
||||
* @flags: OCP interface flags (see OCPIF_* macros above)
|
||||
* @_int_flags: internal flags (see _OCPIF_INT_FLAGS* macros above)
|
||||
*
|
||||
* It may also be useful to add a tag_cnt field for OCP2.x devices.
|
||||
*
|
||||
* Parameter names beginning with an underscore are managed internally by
|
||||
* the omap_hwmod code and should not be set during initialization.
|
||||
*/
|
||||
struct omap_hwmod_ocp_if {
|
||||
struct omap_hwmod *master;
|
||||
struct omap_hwmod *slave;
|
||||
struct omap_hwmod_addr_space *addr;
|
||||
const char *clk;
|
||||
struct clk *_clk;
|
||||
union {
|
||||
struct omap_hwmod_omap2_firewall omap2;
|
||||
} fw;
|
||||
u8 width;
|
||||
u8 user;
|
||||
u8 flags;
|
||||
u8 _int_flags;
|
||||
};
|
||||
|
||||
|
||||
/* Macros for use in struct omap_hwmod_sysconfig */
|
||||
|
||||
/* Flags for use in omap_hwmod_sysconfig.idlemodes */
|
||||
#define MASTER_STANDBY_SHIFT 4
|
||||
#define SLAVE_IDLE_SHIFT 0
|
||||
#define SIDLE_FORCE (HWMOD_IDLEMODE_FORCE << SLAVE_IDLE_SHIFT)
|
||||
#define SIDLE_NO (HWMOD_IDLEMODE_NO << SLAVE_IDLE_SHIFT)
|
||||
#define SIDLE_SMART (HWMOD_IDLEMODE_SMART << SLAVE_IDLE_SHIFT)
|
||||
#define SIDLE_SMART_WKUP (HWMOD_IDLEMODE_SMART_WKUP << SLAVE_IDLE_SHIFT)
|
||||
#define MSTANDBY_FORCE (HWMOD_IDLEMODE_FORCE << MASTER_STANDBY_SHIFT)
|
||||
#define MSTANDBY_NO (HWMOD_IDLEMODE_NO << MASTER_STANDBY_SHIFT)
|
||||
#define MSTANDBY_SMART (HWMOD_IDLEMODE_SMART << MASTER_STANDBY_SHIFT)
|
||||
#define MSTANDBY_SMART_WKUP (HWMOD_IDLEMODE_SMART_WKUP << MASTER_STANDBY_SHIFT)
|
||||
|
||||
/* omap_hwmod_sysconfig.sysc_flags capability flags */
|
||||
#define SYSC_HAS_AUTOIDLE (1 << 0)
|
||||
#define SYSC_HAS_SOFTRESET (1 << 1)
|
||||
#define SYSC_HAS_ENAWAKEUP (1 << 2)
|
||||
#define SYSC_HAS_EMUFREE (1 << 3)
|
||||
#define SYSC_HAS_CLOCKACTIVITY (1 << 4)
|
||||
#define SYSC_HAS_SIDLEMODE (1 << 5)
|
||||
#define SYSC_HAS_MIDLEMODE (1 << 6)
|
||||
#define SYSS_HAS_RESET_STATUS (1 << 7)
|
||||
#define SYSC_NO_CACHE (1 << 8) /* XXX SW flag, belongs elsewhere */
|
||||
#define SYSC_HAS_RESET_STATUS (1 << 9)
|
||||
#define SYSC_HAS_DMADISABLE (1 << 10)
|
||||
|
||||
/* omap_hwmod_sysconfig.clockact flags */
|
||||
#define CLOCKACT_TEST_BOTH 0x0
|
||||
#define CLOCKACT_TEST_MAIN 0x1
|
||||
#define CLOCKACT_TEST_ICLK 0x2
|
||||
#define CLOCKACT_TEST_NONE 0x3
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_sysc_fields - hwmod OCP_SYSCONFIG register field offsets.
|
||||
* @midle_shift: Offset of the midle bit
|
||||
* @clkact_shift: Offset of the clockactivity bit
|
||||
* @sidle_shift: Offset of the sidle bit
|
||||
* @enwkup_shift: Offset of the enawakeup bit
|
||||
* @srst_shift: Offset of the softreset bit
|
||||
* @autoidle_shift: Offset of the autoidle bit
|
||||
* @dmadisable_shift: Offset of the dmadisable bit
|
||||
*/
|
||||
struct omap_hwmod_sysc_fields {
|
||||
u8 midle_shift;
|
||||
u8 clkact_shift;
|
||||
u8 sidle_shift;
|
||||
u8 enwkup_shift;
|
||||
u8 srst_shift;
|
||||
u8 autoidle_shift;
|
||||
u8 dmadisable_shift;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_class_sysconfig - hwmod class OCP_SYS* data
|
||||
* @rev_offs: IP block revision register offset (from module base addr)
|
||||
* @sysc_offs: OCP_SYSCONFIG register offset (from module base addr)
|
||||
* @syss_offs: OCP_SYSSTATUS register offset (from module base addr)
|
||||
* @srst_udelay: Delay needed after doing a softreset in usecs
|
||||
* @idlemodes: One or more of {SIDLE,MSTANDBY}_{OFF,FORCE,SMART}
|
||||
* @sysc_flags: SYS{C,S}_HAS* flags indicating SYSCONFIG bits supported
|
||||
* @clockact: the default value of the module CLOCKACTIVITY bits
|
||||
*
|
||||
* @clockact describes to the module which clocks are likely to be
|
||||
* disabled when the PRCM issues its idle request to the module. Some
|
||||
* modules have separate clockdomains for the interface clock and main
|
||||
* functional clock, and can check whether they should acknowledge the
|
||||
* idle request based on the internal module functionality that has
|
||||
* been associated with the clocks marked in @clockact. This field is
|
||||
* only used if HWMOD_SET_DEFAULT_CLOCKACT is set (see below)
|
||||
*
|
||||
* @sysc_fields: structure containing the offset positions of various bits in
|
||||
* SYSCONFIG register. This can be populated using omap_hwmod_sysc_type1 or
|
||||
* omap_hwmod_sysc_type2 defined in omap_hwmod_common_data.c depending on
|
||||
* whether the device ip is compliant with the original PRCM protocol
|
||||
* defined for OMAP2420 or the new PRCM protocol for new OMAP4 IPs.
|
||||
* If the device follows a different scheme for the sysconfig register ,
|
||||
* then this field has to be populated with the correct offset structure.
|
||||
*/
|
||||
struct omap_hwmod_class_sysconfig {
|
||||
u32 rev_offs;
|
||||
u32 sysc_offs;
|
||||
u32 syss_offs;
|
||||
u16 sysc_flags;
|
||||
struct omap_hwmod_sysc_fields *sysc_fields;
|
||||
u8 srst_udelay;
|
||||
u8 idlemodes;
|
||||
u8 clockact;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_omap2_prcm - OMAP2/3-specific PRCM data
|
||||
* @module_offs: PRCM submodule offset from the start of the PRM/CM
|
||||
* @prcm_reg_id: PRCM register ID (e.g., 3 for CM_AUTOIDLE3)
|
||||
* @module_bit: register bit shift for AUTOIDLE, WKST, WKEN, GRPSEL regs
|
||||
* @idlest_reg_id: IDLEST register ID (e.g., 3 for CM_IDLEST3)
|
||||
* @idlest_idle_bit: register bit shift for CM_IDLEST slave idle bit
|
||||
* @idlest_stdby_bit: register bit shift for CM_IDLEST master standby bit
|
||||
*
|
||||
* @prcm_reg_id and @module_bit are specific to the AUTOIDLE, WKST,
|
||||
* WKEN, GRPSEL registers. In an ideal world, no extra information
|
||||
* would be needed for IDLEST information, but alas, there are some
|
||||
* exceptions, so @idlest_reg_id, @idlest_idle_bit, @idlest_stdby_bit
|
||||
* are needed for the IDLEST registers (c.f. 2430 I2CHS, 3430 USBHOST)
|
||||
*/
|
||||
struct omap_hwmod_omap2_prcm {
|
||||
s16 module_offs;
|
||||
u8 prcm_reg_id;
|
||||
u8 module_bit;
|
||||
u8 idlest_reg_id;
|
||||
u8 idlest_idle_bit;
|
||||
u8 idlest_stdby_bit;
|
||||
};
|
||||
|
||||
/*
|
||||
* Possible values for struct omap_hwmod_omap4_prcm.flags
|
||||
*
|
||||
* HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT: Some IP blocks don't have a PRCM
|
||||
* module-level context loss register associated with them; this
|
||||
* flag bit should be set in those cases
|
||||
*/
|
||||
#define HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT (1 << 0)
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_omap4_prcm - OMAP4-specific PRCM data
|
||||
* @clkctrl_reg: PRCM address of the clock control register
|
||||
* @rstctrl_reg: address of the XXX_RSTCTRL register located in the PRM
|
||||
* @lostcontext_mask: bitmask for selecting bits from RM_*_CONTEXT register
|
||||
* @rstst_reg: (AM33XX only) address of the XXX_RSTST register in the PRM
|
||||
* @submodule_wkdep_bit: bit shift of the WKDEP range
|
||||
* @flags: PRCM register capabilities for this IP block
|
||||
*
|
||||
* If @lostcontext_mask is not defined, context loss check code uses
|
||||
* whole register without masking. @lostcontext_mask should only be
|
||||
* defined in cases where @context_offs register is shared by two or
|
||||
* more hwmods.
|
||||
*/
|
||||
struct omap_hwmod_omap4_prcm {
|
||||
u16 clkctrl_offs;
|
||||
u16 rstctrl_offs;
|
||||
u16 rstst_offs;
|
||||
u16 context_offs;
|
||||
u32 lostcontext_mask;
|
||||
u8 submodule_wkdep_bit;
|
||||
u8 modulemode;
|
||||
u8 flags;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* omap_hwmod.flags definitions
|
||||
*
|
||||
* HWMOD_SWSUP_SIDLE: omap_hwmod code should manually bring module in and out
|
||||
* of idle, rather than relying on module smart-idle
|
||||
* HWMOD_SWSUP_MSTDBY: omap_hwmod code should manually bring module in and out
|
||||
* of standby, rather than relying on module smart-standby
|
||||
* HWMOD_INIT_NO_RESET: don't reset this module at boot - important for
|
||||
* SDRAM controller, etc. XXX probably belongs outside the main hwmod file
|
||||
* XXX Should be HWMOD_SETUP_NO_RESET
|
||||
* HWMOD_INIT_NO_IDLE: don't idle this module at boot - important for SDRAM
|
||||
* controller, etc. XXX probably belongs outside the main hwmod file
|
||||
* XXX Should be HWMOD_SETUP_NO_IDLE
|
||||
* HWMOD_NO_OCP_AUTOIDLE: disable module autoidle (OCP_SYSCONFIG.AUTOIDLE)
|
||||
* when module is enabled, rather than the default, which is to
|
||||
* enable autoidle
|
||||
* HWMOD_SET_DEFAULT_CLOCKACT: program CLOCKACTIVITY bits at startup
|
||||
* HWMOD_NO_IDLEST: this module does not have idle status - this is the case
|
||||
* only for few initiator modules on OMAP2 & 3.
|
||||
* HWMOD_CONTROL_OPT_CLKS_IN_RESET: Enable all optional clocks during reset.
|
||||
* This is needed for devices like DSS that require optional clocks enabled
|
||||
* in order to complete the reset. Optional clocks will be disabled
|
||||
* again after the reset.
|
||||
* HWMOD_16BIT_REG: Module has 16bit registers
|
||||
*/
|
||||
#define HWMOD_SWSUP_SIDLE (1 << 0)
|
||||
#define HWMOD_SWSUP_MSTANDBY (1 << 1)
|
||||
#define HWMOD_INIT_NO_RESET (1 << 2)
|
||||
#define HWMOD_INIT_NO_IDLE (1 << 3)
|
||||
#define HWMOD_NO_OCP_AUTOIDLE (1 << 4)
|
||||
#define HWMOD_SET_DEFAULT_CLOCKACT (1 << 5)
|
||||
#define HWMOD_NO_IDLEST (1 << 6)
|
||||
#define HWMOD_CONTROL_OPT_CLKS_IN_RESET (1 << 7)
|
||||
#define HWMOD_16BIT_REG (1 << 8)
|
||||
|
||||
/*
|
||||
* omap_hwmod._int_flags definitions
|
||||
* These are for internal use only and are managed by the omap_hwmod code.
|
||||
*
|
||||
* _HWMOD_NO_MPU_PORT: no path exists for the MPU to write to this module
|
||||
* _HWMOD_WAKEUP_ENABLED: set when the omap_hwmod code has enabled ENAWAKEUP
|
||||
* _HWMOD_SYSCONFIG_LOADED: set when the OCP_SYSCONFIG value has been cached
|
||||
* _HWMOD_SKIP_ENABLE: set if hwmod enabled during init (HWMOD_INIT_NO_IDLE) -
|
||||
* causes the first call to _enable() to only update the pinmux
|
||||
*/
|
||||
#define _HWMOD_NO_MPU_PORT (1 << 0)
|
||||
#define _HWMOD_WAKEUP_ENABLED (1 << 1)
|
||||
#define _HWMOD_SYSCONFIG_LOADED (1 << 2)
|
||||
#define _HWMOD_SKIP_ENABLE (1 << 3)
|
||||
|
||||
/*
|
||||
* omap_hwmod._state definitions
|
||||
*
|
||||
* INITIALIZED: reset (optionally), initialized, enabled, disabled
|
||||
* (optionally)
|
||||
*
|
||||
*
|
||||
*/
|
||||
#define _HWMOD_STATE_UNKNOWN 0
|
||||
#define _HWMOD_STATE_REGISTERED 1
|
||||
#define _HWMOD_STATE_CLKS_INITED 2
|
||||
#define _HWMOD_STATE_INITIALIZED 3
|
||||
#define _HWMOD_STATE_ENABLED 4
|
||||
#define _HWMOD_STATE_IDLE 5
|
||||
#define _HWMOD_STATE_DISABLED 6
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_class - the type of an IP block
|
||||
* @name: name of the hwmod_class
|
||||
* @sysc: device SYSCONFIG/SYSSTATUS register data
|
||||
* @rev: revision of the IP class
|
||||
* @pre_shutdown: ptr to fn to be executed immediately prior to device shutdown
|
||||
* @reset: ptr to fn to be executed in place of the standard hwmod reset fn
|
||||
*
|
||||
* Represent the class of a OMAP hardware "modules" (e.g. timer,
|
||||
* smartreflex, gpio, uart...)
|
||||
*
|
||||
* @pre_shutdown is a function that will be run immediately before
|
||||
* hwmod clocks are disabled, etc. It is intended for use for hwmods
|
||||
* like the MPU watchdog, which cannot be disabled with the standard
|
||||
* omap_hwmod_shutdown(). The function should return 0 upon success,
|
||||
* or some negative error upon failure. Returning an error will cause
|
||||
* omap_hwmod_shutdown() to abort the device shutdown and return an
|
||||
* error.
|
||||
*
|
||||
* If @reset is defined, then the function it points to will be
|
||||
* executed in place of the standard hwmod _reset() code in
|
||||
* mach-omap2/omap_hwmod.c. This is needed for IP blocks which have
|
||||
* unusual reset sequences - usually processor IP blocks like the IVA.
|
||||
*/
|
||||
struct omap_hwmod_class {
|
||||
const char *name;
|
||||
struct omap_hwmod_class_sysconfig *sysc;
|
||||
u32 rev;
|
||||
int (*pre_shutdown)(struct omap_hwmod *oh);
|
||||
int (*reset)(struct omap_hwmod *oh);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_link - internal structure linking hwmods with ocp_ifs
|
||||
* @ocp_if: OCP interface structure record pointer
|
||||
* @node: list_head pointing to next struct omap_hwmod_link in a list
|
||||
*/
|
||||
struct omap_hwmod_link {
|
||||
struct omap_hwmod_ocp_if *ocp_if;
|
||||
struct list_head node;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_hwmod - integration data for OMAP hardware "modules" (IP blocks)
|
||||
* @name: name of the hwmod
|
||||
* @class: struct omap_hwmod_class * to the class of this hwmod
|
||||
* @od: struct omap_device currently associated with this hwmod (internal use)
|
||||
* @mpu_irqs: ptr to an array of MPU IRQs
|
||||
* @sdma_reqs: ptr to an array of System DMA request IDs
|
||||
* @prcm: PRCM data pertaining to this hwmod
|
||||
* @main_clk: main clock: OMAP clock name
|
||||
* @_clk: pointer to the main struct clk (filled in at runtime)
|
||||
* @opt_clks: other device clocks that drivers can request (0..*)
|
||||
* @voltdm: pointer to voltage domain (filled in at runtime)
|
||||
* @dev_attr: arbitrary device attributes that can be passed to the driver
|
||||
* @_sysc_cache: internal-use hwmod flags
|
||||
* @_mpu_rt_va: cached register target start address (internal use)
|
||||
* @_mpu_port: cached MPU register target slave (internal use)
|
||||
* @opt_clks_cnt: number of @opt_clks
|
||||
* @master_cnt: number of @master entries
|
||||
* @slaves_cnt: number of @slave entries
|
||||
* @response_lat: device OCP response latency (in interface clock cycles)
|
||||
* @_int_flags: internal-use hwmod flags
|
||||
* @_state: internal-use hwmod state
|
||||
* @_postsetup_state: internal-use state to leave the hwmod in after _setup()
|
||||
* @flags: hwmod flags (documented below)
|
||||
* @_lock: spinlock serializing operations on this hwmod
|
||||
* @node: list node for hwmod list (internal use)
|
||||
*
|
||||
* @main_clk refers to this module's "main clock," which for our
|
||||
* purposes is defined as "the functional clock needed for register
|
||||
* accesses to complete." Modules may not have a main clock if the
|
||||
* interface clock also serves as a main clock.
|
||||
*
|
||||
* Parameter names beginning with an underscore are managed internally by
|
||||
* the omap_hwmod code and should not be set during initialization.
|
||||
*
|
||||
* @masters and @slaves are now deprecated.
|
||||
*/
|
||||
struct omap_hwmod {
|
||||
const char *name;
|
||||
struct omap_hwmod_class *class;
|
||||
struct omap_device *od;
|
||||
struct omap_hwmod_mux_info *mux;
|
||||
struct omap_hwmod_irq_info *mpu_irqs;
|
||||
struct omap_hwmod_dma_info *sdma_reqs;
|
||||
struct omap_hwmod_rst_info *rst_lines;
|
||||
union {
|
||||
struct omap_hwmod_omap2_prcm omap2;
|
||||
struct omap_hwmod_omap4_prcm omap4;
|
||||
} prcm;
|
||||
const char *main_clk;
|
||||
struct clk *_clk;
|
||||
struct omap_hwmod_opt_clk *opt_clks;
|
||||
char *clkdm_name;
|
||||
struct clockdomain *clkdm;
|
||||
struct list_head master_ports; /* connect to *_IA */
|
||||
struct list_head slave_ports; /* connect to *_TA */
|
||||
void *dev_attr;
|
||||
u32 _sysc_cache;
|
||||
void __iomem *_mpu_rt_va;
|
||||
spinlock_t _lock;
|
||||
struct list_head node;
|
||||
struct omap_hwmod_ocp_if *_mpu_port;
|
||||
u16 flags;
|
||||
u8 response_lat;
|
||||
u8 rst_lines_cnt;
|
||||
u8 opt_clks_cnt;
|
||||
u8 masters_cnt;
|
||||
u8 slaves_cnt;
|
||||
u8 hwmods_cnt;
|
||||
u8 _int_flags;
|
||||
u8 _state;
|
||||
u8 _postsetup_state;
|
||||
};
|
||||
|
||||
struct omap_hwmod *omap_hwmod_lookup(const char *name);
|
||||
int omap_hwmod_for_each(int (*fn)(struct omap_hwmod *oh, void *data),
|
||||
void *data);
|
||||
|
||||
int __init omap_hwmod_setup_one(const char *name);
|
||||
|
||||
int omap_hwmod_enable(struct omap_hwmod *oh);
|
||||
int omap_hwmod_idle(struct omap_hwmod *oh);
|
||||
int omap_hwmod_shutdown(struct omap_hwmod *oh);
|
||||
|
||||
int omap_hwmod_assert_hardreset(struct omap_hwmod *oh, const char *name);
|
||||
int omap_hwmod_deassert_hardreset(struct omap_hwmod *oh, const char *name);
|
||||
int omap_hwmod_read_hardreset(struct omap_hwmod *oh, const char *name);
|
||||
|
||||
int omap_hwmod_enable_clocks(struct omap_hwmod *oh);
|
||||
int omap_hwmod_disable_clocks(struct omap_hwmod *oh);
|
||||
|
||||
int omap_hwmod_set_slave_idlemode(struct omap_hwmod *oh, u8 idlemode);
|
||||
int omap_hwmod_set_ocp_autoidle(struct omap_hwmod *oh, u8 autoidle);
|
||||
|
||||
int omap_hwmod_reset(struct omap_hwmod *oh);
|
||||
void omap_hwmod_ocp_barrier(struct omap_hwmod *oh);
|
||||
|
||||
void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs);
|
||||
u32 omap_hwmod_read(struct omap_hwmod *oh, u16 reg_offs);
|
||||
int omap_hwmod_softreset(struct omap_hwmod *oh);
|
||||
|
||||
int omap_hwmod_count_resources(struct omap_hwmod *oh);
|
||||
int omap_hwmod_fill_resources(struct omap_hwmod *oh, struct resource *res);
|
||||
int omap_hwmod_fill_dma_resources(struct omap_hwmod *oh, struct resource *res);
|
||||
int omap_hwmod_get_resource_byname(struct omap_hwmod *oh, unsigned int type,
|
||||
const char *name, struct resource *res);
|
||||
|
||||
struct powerdomain *omap_hwmod_get_pwrdm(struct omap_hwmod *oh);
|
||||
void __iomem *omap_hwmod_get_mpu_rt_va(struct omap_hwmod *oh);
|
||||
|
||||
int omap_hwmod_add_initiator_dep(struct omap_hwmod *oh,
|
||||
struct omap_hwmod *init_oh);
|
||||
int omap_hwmod_del_initiator_dep(struct omap_hwmod *oh,
|
||||
struct omap_hwmod *init_oh);
|
||||
|
||||
int omap_hwmod_enable_wakeup(struct omap_hwmod *oh);
|
||||
int omap_hwmod_disable_wakeup(struct omap_hwmod *oh);
|
||||
|
||||
int omap_hwmod_for_each_by_class(const char *classname,
|
||||
int (*fn)(struct omap_hwmod *oh,
|
||||
void *user),
|
||||
void *user);
|
||||
|
||||
int omap_hwmod_set_postsetup_state(struct omap_hwmod *oh, u8 state);
|
||||
int omap_hwmod_get_context_loss_count(struct omap_hwmod *oh);
|
||||
|
||||
int omap_hwmod_no_setup_reset(struct omap_hwmod *oh);
|
||||
|
||||
int omap_hwmod_pad_route_irq(struct omap_hwmod *oh, int pad_idx, int irq_idx);
|
||||
|
||||
extern void __init omap_hwmod_init(void);
|
||||
|
||||
const char *omap_hwmod_get_main_clk(struct omap_hwmod *oh);
|
||||
|
||||
/*
|
||||
* Chip variant-specific hwmod init routines - XXX should be converted
|
||||
* to use initcalls once the initial boot ordering is straightened out
|
||||
*/
|
||||
extern int omap2420_hwmod_init(void);
|
||||
extern int omap2430_hwmod_init(void);
|
||||
extern int omap3xxx_hwmod_init(void);
|
||||
extern int omap44xx_hwmod_init(void);
|
||||
extern int am33xx_hwmod_init(void);
|
||||
|
||||
extern int __init omap_hwmod_register_links(struct omap_hwmod_ocp_if **ois);
|
||||
|
||||
#endif
|
@@ -1,164 +0,0 @@
|
||||
#ifndef ____ASM_ARCH_SDRC_H
|
||||
#define ____ASM_ARCH_SDRC_H
|
||||
|
||||
/*
|
||||
* OMAP2/3 SDRC/SMS register definitions
|
||||
*
|
||||
* Copyright (C) 2007-2008 Texas Instruments, Inc.
|
||||
* Copyright (C) 2007-2008 Nokia Corporation
|
||||
*
|
||||
* Tony Lindgren
|
||||
* Paul Walmsley
|
||||
* Richard Woodruff
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/* SDRC register offsets - read/write with sdrc_{read,write}_reg() */
|
||||
|
||||
#define SDRC_SYSCONFIG 0x010
|
||||
#define SDRC_CS_CFG 0x040
|
||||
#define SDRC_SHARING 0x044
|
||||
#define SDRC_ERR_TYPE 0x04C
|
||||
#define SDRC_DLLA_CTRL 0x060
|
||||
#define SDRC_DLLA_STATUS 0x064
|
||||
#define SDRC_DLLB_CTRL 0x068
|
||||
#define SDRC_DLLB_STATUS 0x06C
|
||||
#define SDRC_POWER 0x070
|
||||
#define SDRC_MCFG_0 0x080
|
||||
#define SDRC_MR_0 0x084
|
||||
#define SDRC_EMR2_0 0x08c
|
||||
#define SDRC_ACTIM_CTRL_A_0 0x09c
|
||||
#define SDRC_ACTIM_CTRL_B_0 0x0a0
|
||||
#define SDRC_RFR_CTRL_0 0x0a4
|
||||
#define SDRC_MANUAL_0 0x0a8
|
||||
#define SDRC_MCFG_1 0x0B0
|
||||
#define SDRC_MR_1 0x0B4
|
||||
#define SDRC_EMR2_1 0x0BC
|
||||
#define SDRC_ACTIM_CTRL_A_1 0x0C4
|
||||
#define SDRC_ACTIM_CTRL_B_1 0x0C8
|
||||
#define SDRC_RFR_CTRL_1 0x0D4
|
||||
#define SDRC_MANUAL_1 0x0D8
|
||||
|
||||
#define SDRC_POWER_AUTOCOUNT_SHIFT 8
|
||||
#define SDRC_POWER_AUTOCOUNT_MASK (0xffff << SDRC_POWER_AUTOCOUNT_SHIFT)
|
||||
#define SDRC_POWER_CLKCTRL_SHIFT 4
|
||||
#define SDRC_POWER_CLKCTRL_MASK (0x3 << SDRC_POWER_CLKCTRL_SHIFT)
|
||||
#define SDRC_SELF_REFRESH_ON_AUTOCOUNT (0x2 << SDRC_POWER_CLKCTRL_SHIFT)
|
||||
|
||||
/*
|
||||
* These values represent the number of memory clock cycles between
|
||||
* autorefresh initiation. They assume 1 refresh per 64 ms (JEDEC), 8192
|
||||
* rows per device, and include a subtraction of a 50 cycle window in the
|
||||
* event that the autorefresh command is delayed due to other SDRC activity.
|
||||
* The '| 1' sets the ARE field to send one autorefresh when the autorefresh
|
||||
* counter reaches 0.
|
||||
*
|
||||
* These represent optimal values for common parts, it won't work for all.
|
||||
* As long as you scale down, most parameters are still work, they just
|
||||
* become sub-optimal. The RFR value goes in the opposite direction. If you
|
||||
* don't adjust it down as your clock period increases the refresh interval
|
||||
* will not be met. Setting all parameters for complete worst case may work,
|
||||
* but may cut memory performance by 2x. Due to errata the DLLs need to be
|
||||
* unlocked and their value needs run time calibration. A dynamic call is
|
||||
* need for that as no single right value exists acorss production samples.
|
||||
*
|
||||
* Only the FULL speed values are given. Current code is such that rate
|
||||
* changes must be made at DPLLoutx2. The actual value adjustment for low
|
||||
* frequency operation will be handled by omap_set_performance()
|
||||
*
|
||||
* By having the boot loader boot up in the fastest L4 speed available likely
|
||||
* will result in something which you can switch between.
|
||||
*/
|
||||
#define SDRC_RFR_CTRL_165MHz (0x00044c00 | 1)
|
||||
#define SDRC_RFR_CTRL_133MHz (0x0003de00 | 1)
|
||||
#define SDRC_RFR_CTRL_100MHz (0x0002da01 | 1)
|
||||
#define SDRC_RFR_CTRL_110MHz (0x0002da01 | 1) /* Need to calc */
|
||||
#define SDRC_RFR_CTRL_BYPASS (0x00005000 | 1) /* Need to calc */
|
||||
|
||||
|
||||
/*
|
||||
* SMS register access
|
||||
*/
|
||||
|
||||
#define OMAP242X_SMS_REGADDR(reg) \
|
||||
(void __iomem *)OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE + reg)
|
||||
#define OMAP243X_SMS_REGADDR(reg) \
|
||||
(void __iomem *)OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE + reg)
|
||||
#define OMAP343X_SMS_REGADDR(reg) \
|
||||
(void __iomem *)OMAP2_L3_IO_ADDRESS(OMAP343X_SMS_BASE + reg)
|
||||
|
||||
/* SMS register offsets - read/write with sms_{read,write}_reg() */
|
||||
|
||||
#define SMS_SYSCONFIG 0x010
|
||||
#define SMS_ROT_CONTROL(context) (0x180 + 0x10 * context)
|
||||
#define SMS_ROT_SIZE(context) (0x184 + 0x10 * context)
|
||||
#define SMS_ROT_PHYSICAL_BA(context) (0x188 + 0x10 * context)
|
||||
/* REVISIT: fill in other SMS registers here */
|
||||
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
/**
|
||||
* struct omap_sdrc_params - SDRC parameters for a given SDRC clock rate
|
||||
* @rate: SDRC clock rate (in Hz)
|
||||
* @actim_ctrla: Value to program to SDRC_ACTIM_CTRLA for this rate
|
||||
* @actim_ctrlb: Value to program to SDRC_ACTIM_CTRLB for this rate
|
||||
* @rfr_ctrl: Value to program to SDRC_RFR_CTRL for this rate
|
||||
* @mr: Value to program to SDRC_MR for this rate
|
||||
*
|
||||
* This structure holds a pre-computed set of register values for the
|
||||
* SDRC for a given SDRC clock rate and SDRAM chip. These are
|
||||
* intended to be pre-computed and specified in an array in the board-*.c
|
||||
* files. The structure is keyed off the 'rate' field.
|
||||
*/
|
||||
struct omap_sdrc_params {
|
||||
unsigned long rate;
|
||||
u32 actim_ctrla;
|
||||
u32 actim_ctrlb;
|
||||
u32 rfr_ctrl;
|
||||
u32 mr;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_SOC_HAS_OMAP2_SDRC
|
||||
void omap2_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
|
||||
struct omap_sdrc_params *sdrc_cs1);
|
||||
#else
|
||||
static inline void __init omap2_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
|
||||
struct omap_sdrc_params *sdrc_cs1) {};
|
||||
#endif
|
||||
|
||||
int omap2_sdrc_get_params(unsigned long r,
|
||||
struct omap_sdrc_params **sdrc_cs0,
|
||||
struct omap_sdrc_params **sdrc_cs1);
|
||||
void omap2_sms_save_context(void);
|
||||
void omap2_sms_restore_context(void);
|
||||
|
||||
void omap2_sms_write_rot_control(u32 val, unsigned ctx);
|
||||
void omap2_sms_write_rot_size(u32 val, unsigned ctx);
|
||||
void omap2_sms_write_rot_physical_ba(u32 val, unsigned ctx);
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP2
|
||||
|
||||
struct memory_timings {
|
||||
u32 m_type; /* ddr = 1, sdr = 0 */
|
||||
u32 dll_mode; /* use lock mode = 1, unlock mode = 0 */
|
||||
u32 slow_dll_ctrl; /* unlock mode, dll value for slow speed */
|
||||
u32 fast_dll_ctrl; /* unlock mode, dll value for fast speed */
|
||||
u32 base_cs; /* base chip select to use for calculations */
|
||||
};
|
||||
|
||||
extern void omap2xxx_sdrc_init_params(u32 force_lock_to_unlock_mode);
|
||||
struct omap_sdrc_params *rx51_get_sdram_timings(void);
|
||||
|
||||
u32 omap2xxx_sdrc_dll_is_unlocked(void);
|
||||
u32 omap2xxx_sdrc_reprogram(u32 level, u32 force);
|
||||
|
||||
#endif /* CONFIG_ARCH_OMAP2 */
|
||||
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif
|
@@ -1,132 +0,0 @@
|
||||
/*
|
||||
* arch/arm/plat-omap/include/mach/serial.h
|
||||
*
|
||||
* Copyright (C) 2009 Texas Instruments
|
||||
* Added OMAP4 support- Santosh Shilimkar <santosh.shilimkar@ti.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_SERIAL_H
|
||||
#define __ASM_ARCH_SERIAL_H
|
||||
|
||||
#include <linux/init.h>
|
||||
|
||||
/*
|
||||
* Memory entry used for the DEBUG_LL UART configuration, relative to
|
||||
* start of RAM. See also uncompress.h and debug-macro.S.
|
||||
*
|
||||
* Note that using a memory location for storing the UART configuration
|
||||
* has at least two limitations:
|
||||
*
|
||||
* 1. Kernel uncompress code cannot overlap OMAP_UART_INFO as the
|
||||
* uncompress code could then partially overwrite itself
|
||||
* 2. We assume printascii is called at least once before paging_init,
|
||||
* and addruart has a chance to read OMAP_UART_INFO
|
||||
*/
|
||||
#define OMAP_UART_INFO_OFS 0x3ffc
|
||||
|
||||
/* OMAP1 serial ports */
|
||||
#define OMAP1_UART1_BASE 0xfffb0000
|
||||
#define OMAP1_UART2_BASE 0xfffb0800
|
||||
#define OMAP1_UART3_BASE 0xfffb9800
|
||||
|
||||
/* OMAP2 serial ports */
|
||||
#define OMAP2_UART1_BASE 0x4806a000
|
||||
#define OMAP2_UART2_BASE 0x4806c000
|
||||
#define OMAP2_UART3_BASE 0x4806e000
|
||||
|
||||
/* OMAP3 serial ports */
|
||||
#define OMAP3_UART1_BASE OMAP2_UART1_BASE
|
||||
#define OMAP3_UART2_BASE OMAP2_UART2_BASE
|
||||
#define OMAP3_UART3_BASE 0x49020000
|
||||
#define OMAP3_UART4_BASE 0x49042000 /* Only on 36xx */
|
||||
#define OMAP3_UART4_AM35XX_BASE 0x4809E000 /* Only on AM35xx */
|
||||
|
||||
/* OMAP4 serial ports */
|
||||
#define OMAP4_UART1_BASE OMAP2_UART1_BASE
|
||||
#define OMAP4_UART2_BASE OMAP2_UART2_BASE
|
||||
#define OMAP4_UART3_BASE 0x48020000
|
||||
#define OMAP4_UART4_BASE 0x4806e000
|
||||
|
||||
/* TI81XX serial ports */
|
||||
#define TI81XX_UART1_BASE 0x48020000
|
||||
#define TI81XX_UART2_BASE 0x48022000
|
||||
#define TI81XX_UART3_BASE 0x48024000
|
||||
|
||||
/* AM3505/3517 UART4 */
|
||||
#define AM35XX_UART4_BASE 0x4809E000 /* Only on AM3505/3517 */
|
||||
|
||||
/* AM33XX serial port */
|
||||
#define AM33XX_UART1_BASE 0x44E09000
|
||||
|
||||
/* OMAP5 serial ports */
|
||||
#define OMAP5_UART1_BASE OMAP2_UART1_BASE
|
||||
#define OMAP5_UART2_BASE OMAP2_UART2_BASE
|
||||
#define OMAP5_UART3_BASE OMAP4_UART3_BASE
|
||||
#define OMAP5_UART4_BASE OMAP4_UART4_BASE
|
||||
#define OMAP5_UART5_BASE 0x48066000
|
||||
#define OMAP5_UART6_BASE 0x48068000
|
||||
|
||||
/* External port on Zoom2/3 */
|
||||
#define ZOOM_UART_BASE 0x10000000
|
||||
#define ZOOM_UART_VIRT 0xfa400000
|
||||
|
||||
#define OMAP_PORT_SHIFT 2
|
||||
#define OMAP7XX_PORT_SHIFT 0
|
||||
#define ZOOM_PORT_SHIFT 1
|
||||
|
||||
#define OMAP1510_BASE_BAUD (12000000/16)
|
||||
#define OMAP16XX_BASE_BAUD (48000000/16)
|
||||
#define OMAP24XX_BASE_BAUD (48000000/16)
|
||||
|
||||
/*
|
||||
* DEBUG_LL port encoding stored into the UART1 scratchpad register by
|
||||
* decomp_setup in uncompress.h
|
||||
*/
|
||||
#define OMAP1UART1 11
|
||||
#define OMAP1UART2 12
|
||||
#define OMAP1UART3 13
|
||||
#define OMAP2UART1 21
|
||||
#define OMAP2UART2 22
|
||||
#define OMAP2UART3 23
|
||||
#define OMAP3UART1 OMAP2UART1
|
||||
#define OMAP3UART2 OMAP2UART2
|
||||
#define OMAP3UART3 33
|
||||
#define OMAP3UART4 34 /* Only on 36xx */
|
||||
#define OMAP4UART1 OMAP2UART1
|
||||
#define OMAP4UART2 OMAP2UART2
|
||||
#define OMAP4UART3 43
|
||||
#define OMAP4UART4 44
|
||||
#define TI81XXUART1 81
|
||||
#define TI81XXUART2 82
|
||||
#define TI81XXUART3 83
|
||||
#define AM33XXUART1 84
|
||||
#define OMAP5UART3 OMAP4UART3
|
||||
#define OMAP5UART4 OMAP4UART4
|
||||
#define ZOOM_UART 95 /* Only on zoom2/3 */
|
||||
|
||||
/* This is only used by 8250.c for omap1510 */
|
||||
#define is_omap_port(pt) ({int __ret = 0; \
|
||||
if ((pt)->port.mapbase == OMAP1_UART1_BASE || \
|
||||
(pt)->port.mapbase == OMAP1_UART2_BASE || \
|
||||
(pt)->port.mapbase == OMAP1_UART3_BASE) \
|
||||
__ret = 1; \
|
||||
__ret; \
|
||||
})
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
struct omap_board_data;
|
||||
struct omap_uart_port_info;
|
||||
|
||||
extern void omap_serial_init(void);
|
||||
extern void omap_serial_board_init(struct omap_uart_port_info *platform_data);
|
||||
extern void omap_serial_init_port(struct omap_board_data *bdata,
|
||||
struct omap_uart_port_info *platform_data);
|
||||
#endif
|
||||
|
||||
#endif
|
@@ -1,18 +1,8 @@
|
||||
/*
|
||||
* arch/arm/plat-omap/include/mach/sram.h
|
||||
*
|
||||
* Interface for functions that need to be run in internal SRAM
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
int omap_sram_init(void);
|
||||
|
||||
#ifndef __ARCH_ARM_OMAP_SRAM_H
|
||||
#define __ARCH_ARM_OMAP_SRAM_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#include <asm/fncpy.h>
|
||||
void omap_map_sram(unsigned long start, unsigned long size,
|
||||
unsigned long skip, int cached);
|
||||
void omap_sram_reset(void);
|
||||
|
||||
extern void *omap_sram_push_address(unsigned long size);
|
||||
|
||||
@@ -24,82 +14,3 @@ extern void *omap_sram_push_address(unsigned long size);
|
||||
_res = fncpy(_sram_address, &(funcp), size); \
|
||||
_res; \
|
||||
})
|
||||
|
||||
extern void omap_sram_reprogram_clock(u32 dpllctl, u32 ckctl);
|
||||
|
||||
extern void omap2_sram_ddr_init(u32 *slow_dll_ctrl, u32 fast_dll_ctrl,
|
||||
u32 base_cs, u32 force_unlock);
|
||||
extern void omap2_sram_reprogram_sdrc(u32 perf_level, u32 dll_val,
|
||||
u32 mem_type);
|
||||
extern u32 omap2_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int bypass);
|
||||
|
||||
extern u32 omap3_configure_core_dpll(
|
||||
u32 m2, u32 unlock_dll, u32 f, u32 inc,
|
||||
u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
|
||||
u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
|
||||
u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
|
||||
u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1);
|
||||
extern void omap3_sram_restore_context(void);
|
||||
|
||||
/* Do not use these */
|
||||
extern void omap1_sram_reprogram_clock(u32 ckctl, u32 dpllctl);
|
||||
extern unsigned long omap1_sram_reprogram_clock_sz;
|
||||
|
||||
extern void omap24xx_sram_reprogram_clock(u32 ckctl, u32 dpllctl);
|
||||
extern unsigned long omap24xx_sram_reprogram_clock_sz;
|
||||
|
||||
extern void omap242x_sram_ddr_init(u32 *slow_dll_ctrl, u32 fast_dll_ctrl,
|
||||
u32 base_cs, u32 force_unlock);
|
||||
extern unsigned long omap242x_sram_ddr_init_sz;
|
||||
|
||||
extern u32 omap242x_sram_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val,
|
||||
int bypass);
|
||||
extern unsigned long omap242x_sram_set_prcm_sz;
|
||||
|
||||
extern void omap242x_sram_reprogram_sdrc(u32 perf_level, u32 dll_val,
|
||||
u32 mem_type);
|
||||
extern unsigned long omap242x_sram_reprogram_sdrc_sz;
|
||||
|
||||
|
||||
extern void omap243x_sram_ddr_init(u32 *slow_dll_ctrl, u32 fast_dll_ctrl,
|
||||
u32 base_cs, u32 force_unlock);
|
||||
extern unsigned long omap243x_sram_ddr_init_sz;
|
||||
|
||||
extern u32 omap243x_sram_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val,
|
||||
int bypass);
|
||||
extern unsigned long omap243x_sram_set_prcm_sz;
|
||||
|
||||
extern void omap243x_sram_reprogram_sdrc(u32 perf_level, u32 dll_val,
|
||||
u32 mem_type);
|
||||
extern unsigned long omap243x_sram_reprogram_sdrc_sz;
|
||||
|
||||
extern u32 omap3_sram_configure_core_dpll(
|
||||
u32 m2, u32 unlock_dll, u32 f, u32 inc,
|
||||
u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
|
||||
u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
|
||||
u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
|
||||
u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1);
|
||||
extern unsigned long omap3_sram_configure_core_dpll_sz;
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
extern void omap_push_sram_idle(void);
|
||||
#else
|
||||
static inline void omap_push_sram_idle(void) {}
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
/*
|
||||
* OMAP2+: define the SRAM PA addresses.
|
||||
* Used by the SRAM management code and the idle sleep code.
|
||||
*/
|
||||
#define OMAP2_SRAM_PA 0x40200000
|
||||
#define OMAP3_SRAM_PA 0x40200000
|
||||
#ifdef CONFIG_OMAP4_ERRATA_I688
|
||||
#define OMAP4_SRAM_PA 0x40304000
|
||||
#define OMAP4_SRAM_VA 0xfe404000
|
||||
#else
|
||||
#define OMAP4_SRAM_PA 0x40300000
|
||||
#endif
|
||||
#define AM33XX_SRAM_PA 0x40300000
|
||||
#endif
|
||||
|
@@ -1,89 +0,0 @@
|
||||
/*
|
||||
* arch/arm/plat-omap/include/mach/tc.h
|
||||
*
|
||||
* OMAP Traffic Controller
|
||||
*
|
||||
* Copyright (C) 2004 Nokia Corporation
|
||||
* Author: Imre Deak <imre.deak@nokia.com>
|
||||
*
|
||||
* 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.,
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_TC_H
|
||||
#define __ASM_ARCH_TC_H
|
||||
|
||||
#define TCMIF_BASE 0xfffecc00
|
||||
#define OMAP_TC_OCPT1_PRIOR (TCMIF_BASE + 0x00)
|
||||
#define OMAP_TC_EMIFS_PRIOR (TCMIF_BASE + 0x04)
|
||||
#define OMAP_TC_EMIFF_PRIOR (TCMIF_BASE + 0x08)
|
||||
#define EMIFS_CONFIG (TCMIF_BASE + 0x0c)
|
||||
#define EMIFS_CS0_CONFIG (TCMIF_BASE + 0x10)
|
||||
#define EMIFS_CS1_CONFIG (TCMIF_BASE + 0x14)
|
||||
#define EMIFS_CS2_CONFIG (TCMIF_BASE + 0x18)
|
||||
#define EMIFS_CS3_CONFIG (TCMIF_BASE + 0x1c)
|
||||
#define EMIFF_SDRAM_CONFIG (TCMIF_BASE + 0x20)
|
||||
#define EMIFF_MRS (TCMIF_BASE + 0x24)
|
||||
#define TC_TIMEOUT1 (TCMIF_BASE + 0x28)
|
||||
#define TC_TIMEOUT2 (TCMIF_BASE + 0x2c)
|
||||
#define TC_TIMEOUT3 (TCMIF_BASE + 0x30)
|
||||
#define TC_ENDIANISM (TCMIF_BASE + 0x34)
|
||||
#define EMIFF_SDRAM_CONFIG_2 (TCMIF_BASE + 0x3c)
|
||||
#define EMIF_CFG_DYNAMIC_WS (TCMIF_BASE + 0x40)
|
||||
#define EMIFS_ACS0 (TCMIF_BASE + 0x50)
|
||||
#define EMIFS_ACS1 (TCMIF_BASE + 0x54)
|
||||
#define EMIFS_ACS2 (TCMIF_BASE + 0x58)
|
||||
#define EMIFS_ACS3 (TCMIF_BASE + 0x5c)
|
||||
#define OMAP_TC_OCPT2_PRIOR (TCMIF_BASE + 0xd0)
|
||||
|
||||
/* external EMIFS chipselect regions */
|
||||
#define OMAP_CS0_PHYS 0x00000000
|
||||
#define OMAP_CS0_SIZE SZ_64M
|
||||
|
||||
#define OMAP_CS1_PHYS 0x04000000
|
||||
#define OMAP_CS1_SIZE SZ_64M
|
||||
|
||||
#define OMAP_CS1A_PHYS OMAP_CS1_PHYS
|
||||
#define OMAP_CS1A_SIZE SZ_32M
|
||||
|
||||
#define OMAP_CS1B_PHYS (OMAP_CS1A_PHYS + OMAP_CS1A_SIZE)
|
||||
#define OMAP_CS1B_SIZE SZ_32M
|
||||
|
||||
#define OMAP_CS2_PHYS 0x08000000
|
||||
#define OMAP_CS2_SIZE SZ_64M
|
||||
|
||||
#define OMAP_CS2A_PHYS OMAP_CS2_PHYS
|
||||
#define OMAP_CS2A_SIZE SZ_32M
|
||||
|
||||
#define OMAP_CS2B_PHYS (OMAP_CS2A_PHYS + OMAP_CS2A_SIZE)
|
||||
#define OMAP_CS2B_SIZE SZ_32M
|
||||
|
||||
#define OMAP_CS3_PHYS 0x0c000000
|
||||
#define OMAP_CS3_SIZE SZ_64M
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
/* EMIF Slow Interface Configuration Register */
|
||||
#define OMAP_EMIFS_CONFIG_FR (1 << 4)
|
||||
#define OMAP_EMIFS_CONFIG_PDE (1 << 3)
|
||||
#define OMAP_EMIFS_CONFIG_PWD_EN (1 << 2)
|
||||
#define OMAP_EMIFS_CONFIG_BM (1 << 1)
|
||||
#define OMAP_EMIFS_CONFIG_WP (1 << 0)
|
||||
|
||||
#define EMIFS_CCS(n) (EMIFS_CS0_CONFIG + (4 * (n)))
|
||||
#define EMIFS_ACS(n) (EMIFS_ACS0 + (4 * (n)))
|
||||
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* __ASM_ARCH_TC_H */
|
@@ -1,204 +0,0 @@
|
||||
/*
|
||||
* arch/arm/plat-omap/include/mach/uncompress.h
|
||||
*
|
||||
* Serial port stubs for kernel decompress status messages
|
||||
*
|
||||
* Initially based on:
|
||||
* linux-2.4.15-rmk1-dsplinux1.6/arch/arm/plat-omap/include/mach1510/uncompress.h
|
||||
* Copyright (C) 2000 RidgeRun, Inc.
|
||||
* Author: Greg Lonnon <glonnon@ridgerun.com>
|
||||
*
|
||||
* Rewritten by:
|
||||
* Author: <source@mvista.com>
|
||||
* 2004 (c) MontaVista Software, Inc.
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public License
|
||||
* version 2. This program is licensed "as is" without any warranty of any
|
||||
* kind, whether express or implied.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/serial_reg.h>
|
||||
|
||||
#include <asm/memory.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <plat/serial.h>
|
||||
|
||||
#define MDR1_MODE_MASK 0x07
|
||||
|
||||
volatile u8 *uart_base;
|
||||
int uart_shift;
|
||||
|
||||
/*
|
||||
* Store the DEBUG_LL uart number into memory.
|
||||
* See also debug-macro.S, and serial.c for related code.
|
||||
*/
|
||||
static void set_omap_uart_info(unsigned char port)
|
||||
{
|
||||
/*
|
||||
* Get address of some.bss variable and round it down
|
||||
* a la CONFIG_AUTO_ZRELADDR.
|
||||
*/
|
||||
u32 ram_start = (u32)&uart_shift & 0xf8000000;
|
||||
u32 *uart_info = (u32 *)(ram_start + OMAP_UART_INFO_OFS);
|
||||
*uart_info = port;
|
||||
}
|
||||
|
||||
static void putc(int c)
|
||||
{
|
||||
if (!uart_base)
|
||||
return;
|
||||
|
||||
/* Check for UART 16x mode */
|
||||
if ((uart_base[UART_OMAP_MDR1 << uart_shift] & MDR1_MODE_MASK) != 0)
|
||||
return;
|
||||
|
||||
while (!(uart_base[UART_LSR << uart_shift] & UART_LSR_THRE))
|
||||
barrier();
|
||||
uart_base[UART_TX << uart_shift] = c;
|
||||
}
|
||||
|
||||
static inline void flush(void)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* Macros to configure UART1 and debug UART
|
||||
*/
|
||||
#define _DEBUG_LL_ENTRY(mach, dbg_uart, dbg_shft, dbg_id) \
|
||||
if (machine_is_##mach()) { \
|
||||
uart_base = (volatile u8 *)(dbg_uart); \
|
||||
uart_shift = (dbg_shft); \
|
||||
port = (dbg_id); \
|
||||
set_omap_uart_info(port); \
|
||||
break; \
|
||||
}
|
||||
|
||||
#define DEBUG_LL_OMAP7XX(p, mach) \
|
||||
_DEBUG_LL_ENTRY(mach, OMAP1_UART##p##_BASE, OMAP7XX_PORT_SHIFT, \
|
||||
OMAP1UART##p)
|
||||
|
||||
#define DEBUG_LL_OMAP1(p, mach) \
|
||||
_DEBUG_LL_ENTRY(mach, OMAP1_UART##p##_BASE, OMAP_PORT_SHIFT, \
|
||||
OMAP1UART##p)
|
||||
|
||||
#define DEBUG_LL_OMAP2(p, mach) \
|
||||
_DEBUG_LL_ENTRY(mach, OMAP2_UART##p##_BASE, OMAP_PORT_SHIFT, \
|
||||
OMAP2UART##p)
|
||||
|
||||
#define DEBUG_LL_OMAP3(p, mach) \
|
||||
_DEBUG_LL_ENTRY(mach, OMAP3_UART##p##_BASE, OMAP_PORT_SHIFT, \
|
||||
OMAP3UART##p)
|
||||
|
||||
#define DEBUG_LL_OMAP4(p, mach) \
|
||||
_DEBUG_LL_ENTRY(mach, OMAP4_UART##p##_BASE, OMAP_PORT_SHIFT, \
|
||||
OMAP4UART##p)
|
||||
|
||||
#define DEBUG_LL_OMAP5(p, mach) \
|
||||
_DEBUG_LL_ENTRY(mach, OMAP5_UART##p##_BASE, OMAP_PORT_SHIFT, \
|
||||
OMAP5UART##p)
|
||||
/* Zoom2/3 shift is different for UART1 and external port */
|
||||
#define DEBUG_LL_ZOOM(mach) \
|
||||
_DEBUG_LL_ENTRY(mach, ZOOM_UART_BASE, ZOOM_PORT_SHIFT, ZOOM_UART)
|
||||
|
||||
#define DEBUG_LL_TI81XX(p, mach) \
|
||||
_DEBUG_LL_ENTRY(mach, TI81XX_UART##p##_BASE, OMAP_PORT_SHIFT, \
|
||||
TI81XXUART##p)
|
||||
|
||||
#define DEBUG_LL_AM33XX(p, mach) \
|
||||
_DEBUG_LL_ENTRY(mach, AM33XX_UART##p##_BASE, OMAP_PORT_SHIFT, \
|
||||
AM33XXUART##p)
|
||||
|
||||
static inline void arch_decomp_setup(void)
|
||||
{
|
||||
int port = 0;
|
||||
|
||||
/*
|
||||
* Initialize the port based on the machine ID from the bootloader.
|
||||
* Note that we're using macros here instead of switch statement
|
||||
* as machine_is functions are optimized out for the boards that
|
||||
* are not selected.
|
||||
*/
|
||||
do {
|
||||
/* omap7xx/8xx based boards using UART1 with shift 0 */
|
||||
DEBUG_LL_OMAP7XX(1, herald);
|
||||
DEBUG_LL_OMAP7XX(1, omap_perseus2);
|
||||
|
||||
/* omap15xx/16xx based boards using UART1 */
|
||||
DEBUG_LL_OMAP1(1, ams_delta);
|
||||
DEBUG_LL_OMAP1(1, nokia770);
|
||||
DEBUG_LL_OMAP1(1, omap_h2);
|
||||
DEBUG_LL_OMAP1(1, omap_h3);
|
||||
DEBUG_LL_OMAP1(1, omap_innovator);
|
||||
DEBUG_LL_OMAP1(1, omap_osk);
|
||||
DEBUG_LL_OMAP1(1, omap_palmte);
|
||||
DEBUG_LL_OMAP1(1, omap_palmz71);
|
||||
|
||||
/* omap15xx/16xx based boards using UART2 */
|
||||
DEBUG_LL_OMAP1(2, omap_palmtt);
|
||||
|
||||
/* omap15xx/16xx based boards using UART3 */
|
||||
DEBUG_LL_OMAP1(3, sx1);
|
||||
|
||||
/* omap2 based boards using UART1 */
|
||||
DEBUG_LL_OMAP2(1, omap_2430sdp);
|
||||
DEBUG_LL_OMAP2(1, omap_apollon);
|
||||
DEBUG_LL_OMAP2(1, omap_h4);
|
||||
|
||||
/* omap2 based boards using UART3 */
|
||||
DEBUG_LL_OMAP2(3, nokia_n800);
|
||||
DEBUG_LL_OMAP2(3, nokia_n810);
|
||||
DEBUG_LL_OMAP2(3, nokia_n810_wimax);
|
||||
|
||||
/* omap3 based boards using UART1 */
|
||||
DEBUG_LL_OMAP2(1, omap3evm);
|
||||
DEBUG_LL_OMAP3(1, omap_3430sdp);
|
||||
DEBUG_LL_OMAP3(1, omap_3630sdp);
|
||||
DEBUG_LL_OMAP3(1, omap3530_lv_som);
|
||||
DEBUG_LL_OMAP3(1, omap3_torpedo);
|
||||
|
||||
/* omap3 based boards using UART3 */
|
||||
DEBUG_LL_OMAP3(3, cm_t35);
|
||||
DEBUG_LL_OMAP3(3, cm_t3517);
|
||||
DEBUG_LL_OMAP3(3, cm_t3730);
|
||||
DEBUG_LL_OMAP3(3, craneboard);
|
||||
DEBUG_LL_OMAP3(3, devkit8000);
|
||||
DEBUG_LL_OMAP3(3, igep0020);
|
||||
DEBUG_LL_OMAP3(3, igep0030);
|
||||
DEBUG_LL_OMAP3(3, nokia_rm680);
|
||||
DEBUG_LL_OMAP3(3, nokia_rm696);
|
||||
DEBUG_LL_OMAP3(3, nokia_rx51);
|
||||
DEBUG_LL_OMAP3(3, omap3517evm);
|
||||
DEBUG_LL_OMAP3(3, omap3_beagle);
|
||||
DEBUG_LL_OMAP3(3, omap3_pandora);
|
||||
DEBUG_LL_OMAP3(3, omap_ldp);
|
||||
DEBUG_LL_OMAP3(3, overo);
|
||||
DEBUG_LL_OMAP3(3, touchbook);
|
||||
|
||||
/* omap4 based boards using UART3 */
|
||||
DEBUG_LL_OMAP4(3, omap_4430sdp);
|
||||
DEBUG_LL_OMAP4(3, omap4_panda);
|
||||
|
||||
/* omap5 based boards using UART3 */
|
||||
DEBUG_LL_OMAP5(3, omap5_sevm);
|
||||
|
||||
/* zoom2/3 external uart */
|
||||
DEBUG_LL_ZOOM(omap_zoom2);
|
||||
DEBUG_LL_ZOOM(omap_zoom3);
|
||||
|
||||
/* TI8168 base boards using UART3 */
|
||||
DEBUG_LL_TI81XX(3, ti8168evm);
|
||||
|
||||
/* TI8148 base boards using UART1 */
|
||||
DEBUG_LL_TI81XX(1, ti8148evm);
|
||||
|
||||
/* AM33XX base boards using UART1 */
|
||||
DEBUG_LL_AM33XX(1, am335xevm);
|
||||
} while (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* nothing to do
|
||||
*/
|
||||
#define arch_decomp_wdog()
|
@@ -1,179 +0,0 @@
|
||||
// include/asm-arm/mach-omap/usb.h
|
||||
|
||||
#ifndef __ASM_ARCH_OMAP_USB_H
|
||||
#define __ASM_ARCH_OMAP_USB_H
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/usb/musb.h>
|
||||
|
||||
#define OMAP3_HS_USB_PORTS 3
|
||||
|
||||
enum usbhs_omap_port_mode {
|
||||
OMAP_USBHS_PORT_MODE_UNUSED,
|
||||
OMAP_EHCI_PORT_MODE_PHY,
|
||||
OMAP_EHCI_PORT_MODE_TLL,
|
||||
OMAP_EHCI_PORT_MODE_HSIC,
|
||||
OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0,
|
||||
OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM,
|
||||
OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0,
|
||||
OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM,
|
||||
OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0,
|
||||
OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM,
|
||||
OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0,
|
||||
OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM,
|
||||
OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0,
|
||||
OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM
|
||||
};
|
||||
|
||||
struct usbhs_omap_board_data {
|
||||
enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
|
||||
|
||||
/* have to be valid if phy_reset is true and portx is in phy mode */
|
||||
int reset_gpio_port[OMAP3_HS_USB_PORTS];
|
||||
|
||||
/* Set this to true for ES2.x silicon */
|
||||
unsigned es2_compatibility:1;
|
||||
|
||||
unsigned phy_reset:1;
|
||||
|
||||
/*
|
||||
* Regulators for USB PHYs.
|
||||
* Each PHY can have a separate regulator.
|
||||
*/
|
||||
struct regulator *regulator[OMAP3_HS_USB_PORTS];
|
||||
};
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP2PLUS
|
||||
|
||||
struct ehci_hcd_omap_platform_data {
|
||||
enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
|
||||
int reset_gpio_port[OMAP3_HS_USB_PORTS];
|
||||
struct regulator *regulator[OMAP3_HS_USB_PORTS];
|
||||
unsigned phy_reset:1;
|
||||
};
|
||||
|
||||
struct ohci_hcd_omap_platform_data {
|
||||
enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
|
||||
unsigned es2_compatibility:1;
|
||||
};
|
||||
|
||||
struct usbhs_omap_platform_data {
|
||||
enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
|
||||
|
||||
struct ehci_hcd_omap_platform_data *ehci_data;
|
||||
struct ohci_hcd_omap_platform_data *ohci_data;
|
||||
};
|
||||
|
||||
struct usbtll_omap_platform_data {
|
||||
enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
|
||||
};
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
struct omap_musb_board_data {
|
||||
u8 interface_type;
|
||||
u8 mode;
|
||||
u16 power;
|
||||
unsigned extvbus:1;
|
||||
void (*set_phy_power)(u8 on);
|
||||
void (*clear_irq)(void);
|
||||
void (*set_mode)(u8 mode);
|
||||
void (*reset)(void);
|
||||
};
|
||||
|
||||
enum musb_interface {MUSB_INTERFACE_ULPI, MUSB_INTERFACE_UTMI};
|
||||
|
||||
extern void usb_musb_init(struct omap_musb_board_data *board_data);
|
||||
|
||||
extern void usbhs_init(const struct usbhs_omap_board_data *pdata);
|
||||
extern int omap_tll_enable(void);
|
||||
extern int omap_tll_disable(void);
|
||||
|
||||
extern int omap4430_phy_power(struct device *dev, int ID, int on);
|
||||
extern int omap4430_phy_set_clk(struct device *dev, int on);
|
||||
extern int omap4430_phy_init(struct device *dev);
|
||||
extern int omap4430_phy_exit(struct device *dev);
|
||||
extern int omap4430_phy_suspend(struct device *dev, int suspend);
|
||||
|
||||
#endif
|
||||
|
||||
extern void am35x_musb_reset(void);
|
||||
extern void am35x_musb_phy_power(u8 on);
|
||||
extern void am35x_musb_clear_irq(void);
|
||||
extern void am35x_set_mode(u8 musb_mode);
|
||||
extern void ti81xx_musb_phy_power(u8 on);
|
||||
|
||||
/* AM35x */
|
||||
/* USB 2.0 PHY Control */
|
||||
#define CONF2_PHY_GPIOMODE (1 << 23)
|
||||
#define CONF2_OTGMODE (3 << 14)
|
||||
#define CONF2_NO_OVERRIDE (0 << 14)
|
||||
#define CONF2_FORCE_HOST (1 << 14)
|
||||
#define CONF2_FORCE_DEVICE (2 << 14)
|
||||
#define CONF2_FORCE_HOST_VBUS_LOW (3 << 14)
|
||||
#define CONF2_SESENDEN (1 << 13)
|
||||
#define CONF2_VBDTCTEN (1 << 12)
|
||||
#define CONF2_REFFREQ_24MHZ (2 << 8)
|
||||
#define CONF2_REFFREQ_26MHZ (7 << 8)
|
||||
#define CONF2_REFFREQ_13MHZ (6 << 8)
|
||||
#define CONF2_REFFREQ (0xf << 8)
|
||||
#define CONF2_PHYCLKGD (1 << 7)
|
||||
#define CONF2_VBUSSENSE (1 << 6)
|
||||
#define CONF2_PHY_PLLON (1 << 5)
|
||||
#define CONF2_RESET (1 << 4)
|
||||
#define CONF2_PHYPWRDN (1 << 3)
|
||||
#define CONF2_OTGPWRDN (1 << 2)
|
||||
#define CONF2_DATPOL (1 << 1)
|
||||
|
||||
/* TI81XX specific definitions */
|
||||
#define USBCTRL0 0x620
|
||||
#define USBSTAT0 0x624
|
||||
|
||||
/* TI816X PHY controls bits */
|
||||
#define TI816X_USBPHY0_NORMAL_MODE (1 << 0)
|
||||
#define TI816X_USBPHY_REFCLK_OSC (1 << 8)
|
||||
|
||||
/* TI814X PHY controls bits */
|
||||
#define USBPHY_CM_PWRDN (1 << 0)
|
||||
#define USBPHY_OTG_PWRDN (1 << 1)
|
||||
#define USBPHY_CHGDET_DIS (1 << 2)
|
||||
#define USBPHY_CHGDET_RSTRT (1 << 3)
|
||||
#define USBPHY_SRCONDM (1 << 4)
|
||||
#define USBPHY_SINKONDP (1 << 5)
|
||||
#define USBPHY_CHGISINK_EN (1 << 6)
|
||||
#define USBPHY_CHGVSRC_EN (1 << 7)
|
||||
#define USBPHY_DMPULLUP (1 << 8)
|
||||
#define USBPHY_DPPULLUP (1 << 9)
|
||||
#define USBPHY_CDET_EXTCTL (1 << 10)
|
||||
#define USBPHY_GPIO_MODE (1 << 12)
|
||||
#define USBPHY_DPOPBUFCTL (1 << 13)
|
||||
#define USBPHY_DMOPBUFCTL (1 << 14)
|
||||
#define USBPHY_DPINPUT (1 << 15)
|
||||
#define USBPHY_DMINPUT (1 << 16)
|
||||
#define USBPHY_DPGPIO_PD (1 << 17)
|
||||
#define USBPHY_DMGPIO_PD (1 << 18)
|
||||
#define USBPHY_OTGVDET_EN (1 << 19)
|
||||
#define USBPHY_OTGSESSEND_EN (1 << 20)
|
||||
#define USBPHY_DATA_POLARITY (1 << 23)
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP1) && defined(CONFIG_USB)
|
||||
u32 omap1_usb0_init(unsigned nwires, unsigned is_device);
|
||||
u32 omap1_usb1_init(unsigned nwires);
|
||||
u32 omap1_usb2_init(unsigned nwires, unsigned alt_pingroup);
|
||||
#else
|
||||
static inline u32 omap1_usb0_init(unsigned nwires, unsigned is_device)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline u32 omap1_usb1_init(unsigned nwires)
|
||||
{
|
||||
return 0;
|
||||
|
||||
}
|
||||
static inline u32 omap1_usb2_init(unsigned nwires, unsigned alt_pingroup)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __ASM_ARCH_OMAP_USB_H */
|
@@ -1,66 +0,0 @@
|
||||
/*
|
||||
* VRFB Rotation Engine
|
||||
*
|
||||
* Copyright (C) 2009 Nokia Corporation
|
||||
* Author: Tomi Valkeinen <tomi.valkeinen@nokia.com>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.,
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __OMAP_VRFB_H__
|
||||
#define __OMAP_VRFB_H__
|
||||
|
||||
#define OMAP_VRFB_LINE_LEN 2048
|
||||
|
||||
struct vrfb {
|
||||
u8 context;
|
||||
void __iomem *vaddr[4];
|
||||
unsigned long paddr[4];
|
||||
u16 xres;
|
||||
u16 yres;
|
||||
u16 xoffset;
|
||||
u16 yoffset;
|
||||
u8 bytespp;
|
||||
bool yuv_mode;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_OMAP2_VRFB
|
||||
extern int omap_vrfb_request_ctx(struct vrfb *vrfb);
|
||||
extern void omap_vrfb_release_ctx(struct vrfb *vrfb);
|
||||
extern void omap_vrfb_adjust_size(u16 *width, u16 *height,
|
||||
u8 bytespp);
|
||||
extern u32 omap_vrfb_min_phys_size(u16 width, u16 height, u8 bytespp);
|
||||
extern u16 omap_vrfb_max_height(u32 phys_size, u16 width, u8 bytespp);
|
||||
extern void omap_vrfb_setup(struct vrfb *vrfb, unsigned long paddr,
|
||||
u16 width, u16 height,
|
||||
unsigned bytespp, bool yuv_mode);
|
||||
extern int omap_vrfb_map_angle(struct vrfb *vrfb, u16 height, u8 rot);
|
||||
extern void omap_vrfb_restore_context(void);
|
||||
|
||||
#else
|
||||
static inline int omap_vrfb_request_ctx(struct vrfb *vrfb) { return 0; }
|
||||
static inline void omap_vrfb_release_ctx(struct vrfb *vrfb) {}
|
||||
static inline void omap_vrfb_adjust_size(u16 *width, u16 *height,
|
||||
u8 bytespp) {}
|
||||
static inline u32 omap_vrfb_min_phys_size(u16 width, u16 height, u8 bytespp)
|
||||
{ return 0; }
|
||||
static inline u16 omap_vrfb_max_height(u32 phys_size, u16 width, u8 bytespp)
|
||||
{ return 0; }
|
||||
static inline void omap_vrfb_setup(struct vrfb *vrfb, unsigned long paddr,
|
||||
u16 width, u16 height, unsigned bytespp, bool yuv_mode) {}
|
||||
static inline int omap_vrfb_map_angle(struct vrfb *vrfb, u16 height, u8 rot)
|
||||
{ return 0; }
|
||||
static inline void omap_vrfb_restore_context(void) {}
|
||||
#endif
|
||||
#endif /* __VRFB_H */
|
Reference in New Issue
Block a user