Merge branch 'fscache' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs into for-linus
This commit is contained in:
Коммит
21e89c0c48
|
@ -308,6 +308,18 @@ performed on the denizens of the cache. These are held in a structure of type:
|
|||
obtained by calling object->cookie->def->get_aux()/get_attr().
|
||||
|
||||
|
||||
(*) Invalidate data object [mandatory]:
|
||||
|
||||
int (*invalidate_object)(struct fscache_operation *op)
|
||||
|
||||
This is called to invalidate a data object (as pointed to by op->object).
|
||||
All the data stored for this object should be discarded and an
|
||||
attr_changed operation should be performed. The caller will follow up
|
||||
with an object update operation.
|
||||
|
||||
fscache_op_complete() must be called on op before returning.
|
||||
|
||||
|
||||
(*) Discard object [mandatory]:
|
||||
|
||||
void (*drop_object)(struct fscache_object *object)
|
||||
|
@ -419,7 +431,10 @@ performed on the denizens of the cache. These are held in a structure of type:
|
|||
|
||||
If an I/O error occurs, fscache_io_error() should be called and -ENOBUFS
|
||||
returned if possible or fscache_end_io() called with a suitable error
|
||||
code..
|
||||
code.
|
||||
|
||||
fscache_put_retrieval() should be called after a page or pages are dealt
|
||||
with. This will complete the operation when all pages are dealt with.
|
||||
|
||||
|
||||
(*) Request pages be read from cache [mandatory]:
|
||||
|
@ -526,6 +541,27 @@ FS-Cache provides some utilities that a cache backend may make use of:
|
|||
error value should be 0 if successful and an error otherwise.
|
||||
|
||||
|
||||
(*) Record that one or more pages being retrieved or allocated have been dealt
|
||||
with:
|
||||
|
||||
void fscache_retrieval_complete(struct fscache_retrieval *op,
|
||||
int n_pages);
|
||||
|
||||
This is called to record the fact that one or more pages have been dealt
|
||||
with and are no longer the concern of this operation. When the number of
|
||||
pages remaining in the operation reaches 0, the operation will be
|
||||
completed.
|
||||
|
||||
|
||||
(*) Record operation completion:
|
||||
|
||||
void fscache_op_complete(struct fscache_operation *op);
|
||||
|
||||
This is called to record the completion of an operation. This deducts
|
||||
this operation from the parent object's run state, potentially permitting
|
||||
one or more pending operations to start running.
|
||||
|
||||
|
||||
(*) Set highest store limit:
|
||||
|
||||
void fscache_set_store_limit(struct fscache_object *object,
|
||||
|
|
|
@ -35,8 +35,9 @@ This document contains the following sections:
|
|||
(12) Index and data file update
|
||||
(13) Miscellaneous cookie operations
|
||||
(14) Cookie unregistration
|
||||
(15) Index and data file invalidation
|
||||
(16) FS-Cache specific page flags.
|
||||
(15) Index invalidation
|
||||
(16) Data file invalidation
|
||||
(17) FS-Cache specific page flags.
|
||||
|
||||
|
||||
=============================
|
||||
|
@ -767,13 +768,42 @@ the cookies for "child" indices, objects and pages have been relinquished
|
|||
first.
|
||||
|
||||
|
||||
================================
|
||||
INDEX AND DATA FILE INVALIDATION
|
||||
================================
|
||||
==================
|
||||
INDEX INVALIDATION
|
||||
==================
|
||||
|
||||
There is no direct way to invalidate an index subtree or a data file. To do
|
||||
this, the caller should relinquish and retire the cookie they have, and then
|
||||
acquire a new one.
|
||||
There is no direct way to invalidate an index subtree. To do this, the caller
|
||||
should relinquish and retire the cookie they have, and then acquire a new one.
|
||||
|
||||
|
||||
======================
|
||||
DATA FILE INVALIDATION
|
||||
======================
|
||||
|
||||
Sometimes it will be necessary to invalidate an object that contains data.
|
||||
Typically this will be necessary when the server tells the netfs of a foreign
|
||||
change - at which point the netfs has to throw away all the state it had for an
|
||||
inode and reload from the server.
|
||||
|
||||
To indicate that a cache object should be invalidated, the following function
|
||||
can be called:
|
||||
|
||||
void fscache_invalidate(struct fscache_cookie *cookie);
|
||||
|
||||
This can be called with spinlocks held as it defers the work to a thread pool.
|
||||
All extant storage, retrieval and attribute change ops at this point are
|
||||
cancelled and discarded. Some future operations will be rejected until the
|
||||
cache has had a chance to insert a barrier in the operations queue. After
|
||||
that, operations will be queued again behind the invalidation operation.
|
||||
|
||||
The invalidation operation will perform an attribute change operation and an
|
||||
auxiliary data update operation as it is very likely these will have changed.
|
||||
|
||||
Using the following function, the netfs can wait for the invalidation operation
|
||||
to have reached a point at which it can start submitting ordinary operations
|
||||
once again:
|
||||
|
||||
void fscache_wait_on_invalidate(struct fscache_cookie *cookie);
|
||||
|
||||
|
||||
===========================
|
||||
|
|
|
@ -216,7 +216,14 @@ servicing netfs requests:
|
|||
The normal running state. In this state, requests the netfs makes will be
|
||||
passed on to the cache.
|
||||
|
||||
(6) State FSCACHE_OBJECT_UPDATING.
|
||||
(6) State FSCACHE_OBJECT_INVALIDATING.
|
||||
|
||||
The object is undergoing invalidation. When the state comes here, it
|
||||
discards all pending read, write and attribute change operations as it is
|
||||
going to clear out the cache entirely and reinitialise it. It will then
|
||||
continue to the FSCACHE_OBJECT_UPDATING state.
|
||||
|
||||
(7) State FSCACHE_OBJECT_UPDATING.
|
||||
|
||||
The state machine comes here to update the object in the cache from the
|
||||
netfs's records. This involves updating the auxiliary data that is used
|
||||
|
@ -225,13 +232,13 @@ servicing netfs requests:
|
|||
And there are terminal states in which an object cleans itself up, deallocates
|
||||
memory and potentially deletes stuff from disk:
|
||||
|
||||
(7) State FSCACHE_OBJECT_LC_DYING.
|
||||
(8) State FSCACHE_OBJECT_LC_DYING.
|
||||
|
||||
The object comes here if it is dying because of a lookup or creation
|
||||
error. This would be due to a disk error or system error of some sort.
|
||||
Temporary data is cleaned up, and the parent is released.
|
||||
|
||||
(8) State FSCACHE_OBJECT_DYING.
|
||||
(9) State FSCACHE_OBJECT_DYING.
|
||||
|
||||
The object comes here if it is dying due to an error, because its parent
|
||||
cookie has been relinquished by the netfs or because the cache is being
|
||||
|
@ -241,27 +248,27 @@ memory and potentially deletes stuff from disk:
|
|||
can destroy themselves. This object waits for all its children to go away
|
||||
before advancing to the next state.
|
||||
|
||||
(9) State FSCACHE_OBJECT_ABORT_INIT.
|
||||
(10) State FSCACHE_OBJECT_ABORT_INIT.
|
||||
|
||||
The object comes to this state if it was waiting on its parent in
|
||||
FSCACHE_OBJECT_INIT, but its parent died. The object will destroy itself
|
||||
so that the parent may proceed from the FSCACHE_OBJECT_DYING state.
|
||||
|
||||
(10) State FSCACHE_OBJECT_RELEASING.
|
||||
(11) State FSCACHE_OBJECT_RECYCLING.
|
||||
(11) State FSCACHE_OBJECT_RELEASING.
|
||||
(12) State FSCACHE_OBJECT_RECYCLING.
|
||||
|
||||
The object comes to one of these two states when dying once it is rid of
|
||||
all its children, if it is dying because the netfs relinquished its
|
||||
cookie. In the first state, the cached data is expected to persist, and
|
||||
in the second it will be deleted.
|
||||
|
||||
(12) State FSCACHE_OBJECT_WITHDRAWING.
|
||||
(13) State FSCACHE_OBJECT_WITHDRAWING.
|
||||
|
||||
The object transits to this state if the cache decides it wants to
|
||||
withdraw the object from service, perhaps to make space, but also due to
|
||||
error or just because the whole cache is being withdrawn.
|
||||
|
||||
(13) State FSCACHE_OBJECT_DEAD.
|
||||
(14) State FSCACHE_OBJECT_DEAD.
|
||||
|
||||
The object transits to this state when the in-memory object record is
|
||||
ready to be deleted. The object processor shouldn't ever see an object in
|
||||
|
|
|
@ -174,7 +174,7 @@ Operations are used through the following procedure:
|
|||
necessary (the object might have died whilst the thread was waiting).
|
||||
|
||||
When it has finished doing its processing, it should call
|
||||
fscache_put_operation() on it.
|
||||
fscache_op_complete() and fscache_put_operation() on it.
|
||||
|
||||
(4) The operation holds an effective lock upon the object, preventing other
|
||||
exclusive ops conflicting until it is released. The operation can be
|
||||
|
|
|
@ -209,3 +209,13 @@ doesn't use CPU cycles.
|
|||
Trip points must be set properly before switching to automatic fan speed
|
||||
control mode. The driver will perform basic integrity checks before
|
||||
actually switching to automatic control mode.
|
||||
|
||||
|
||||
Temperature offset attributes
|
||||
-----------------------------
|
||||
|
||||
The driver supports temp[1-3]_offset sysfs attributes to adjust the reported
|
||||
temperature for thermal diodes or diode-connected thermal transistors.
|
||||
If a temperature sensor is configured for thermistors, the attribute values
|
||||
are ignored. If the thermal sensor type is Intel PECI, the temperature offset
|
||||
must be programmed to the critical CPU temperature.
|
||||
|
|
|
@ -107,6 +107,7 @@ dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \
|
|||
omap3-evm.dtb \
|
||||
omap3-tobi.dtb \
|
||||
omap4-panda.dtb \
|
||||
omap4-panda-a4.dtb \
|
||||
omap4-panda-es.dtb \
|
||||
omap4-var-som.dtb \
|
||||
omap4-sdp.dtb \
|
||||
|
@ -131,8 +132,8 @@ dtb-$(CONFIG_ARCH_SPEAR3XX)+= spear300-evb.dtb \
|
|||
spear320-evb.dtb \
|
||||
spear320-hmi.dtb
|
||||
dtb-$(CONFIG_ARCH_SPEAR6XX)+= spear600-evb.dtb
|
||||
dtb-$(CONFIG_ARCH_SUNXI) += sun4i-cubieboard.dtb \
|
||||
sun5i-olinuxino.dtb
|
||||
dtb-$(CONFIG_ARCH_SUNXI) += sun4i-a10-cubieboard.dtb \
|
||||
sun5i-a13-olinuxino.dtb
|
||||
dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \
|
||||
tegra20-medcom-wide.dtb \
|
||||
tegra20-paz00.dtb \
|
||||
|
|
|
@ -368,14 +368,14 @@
|
|||
compatible = "atmel,at91rm9200-ssc";
|
||||
reg = <0xfff98000 0x4000>;
|
||||
interrupts = <16 4 5>;
|
||||
status = "disable";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ssc1: ssc@fff9c000 {
|
||||
compatible = "atmel,at91rm9200-ssc";
|
||||
reg = <0xfff9c000 0x4000>;
|
||||
interrupts = <17 4 5>;
|
||||
status = "disable";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffbc000 {
|
||||
|
|
|
@ -425,14 +425,14 @@
|
|||
compatible = "atmel,at91sam9g45-ssc";
|
||||
reg = <0xfff9c000 0x4000>;
|
||||
interrupts = <16 4 5>;
|
||||
status = "disable";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ssc1: ssc@fffa0000 {
|
||||
compatible = "atmel,at91sam9g45-ssc";
|
||||
reg = <0xfffa0000 0x4000>;
|
||||
interrupts = <17 4 5>;
|
||||
status = "disable";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
adc0: adc@fffb0000 {
|
||||
|
|
|
@ -92,7 +92,7 @@
|
|||
compatible = "atmel,at91sam9g45-ssc";
|
||||
reg = <0xf0010000 0x4000>;
|
||||
interrupts = <28 4 5>;
|
||||
status = "disable";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tcb0: timer@f8008000 {
|
||||
|
|
|
@ -21,17 +21,17 @@
|
|||
};
|
||||
|
||||
soc {
|
||||
aipi@10000000 { /* aipi */
|
||||
|
||||
aipi@10000000 { /* aipi1 */
|
||||
uart1: serial@1000a000 {
|
||||
fsl,uart-has-rtscts;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
fec@1002b000 {
|
||||
aipi@10020000 { /* aipi2 */
|
||||
ethernet@1002b000 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
|
|
@ -21,8 +21,7 @@
|
|||
};
|
||||
|
||||
soc {
|
||||
aipi@10000000 { /* aipi */
|
||||
|
||||
aipi@10000000 { /* aipi1 */
|
||||
serial@1000a000 {
|
||||
fsl,uart-has-rtscts;
|
||||
status = "okay";
|
||||
|
@ -38,10 +37,6 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
ethernet@1002b000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
i2c@1001d000 {
|
||||
clock-frequency = <400000>;
|
||||
status = "okay";
|
||||
|
@ -60,6 +55,12 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
aipi@10020000 { /* aipi2 */
|
||||
ethernet@1002b000 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nor_flash@c0000000 {
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
compatible = "fsl,aipi-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x10000000 0x10000000>;
|
||||
reg = <0x10000000 0x20000>;
|
||||
ranges;
|
||||
|
||||
wdog: wdog@10002000 {
|
||||
|
@ -211,6 +211,15 @@
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
aipi@10020000 { /* AIPI2 */
|
||||
compatible = "fsl,aipi-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x10020000 0x20000>;
|
||||
ranges;
|
||||
|
||||
fec: ethernet@1002b000 {
|
||||
compatible = "fsl,imx27-fec";
|
||||
reg = <0x1002b000 0x4000>;
|
||||
|
|
|
@ -15,6 +15,6 @@
|
|||
|
||||
memory {
|
||||
device_type = "memory";
|
||||
reg = <0x80000000 0x84000000>; /* 64 MB */
|
||||
reg = <0x80000000 0x4000000>; /* 64 MB */
|
||||
};
|
||||
};
|
||||
|
|
|
@ -11,11 +11,11 @@
|
|||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "sun4i.dtsi"
|
||||
/include/ "sun4i-a10.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Cubietech Cubieboard";
|
||||
compatible = "cubietech,cubieboard", "allwinner,sun4i";
|
||||
compatible = "cubietech,a10-cubieboard", "allwinner,sun4i-a10";
|
||||
|
||||
aliases {
|
||||
serial0 = &uart0;
|
||||
|
|
|
@ -12,11 +12,11 @@
|
|||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "sun5i.dtsi"
|
||||
/include/ "sun5i-a13.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Olimex A13-Olinuxino";
|
||||
compatible = "olimex,a13-olinuxino", "allwinner,sun5i";
|
||||
compatible = "olimex,a13-olinuxino", "allwinner,sun5i-a13";
|
||||
|
||||
chosen {
|
||||
bootargs = "earlyprintk console=ttyS0,115200";
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
#include <mach/cp_intc.h>
|
||||
#include <mach/da8xx.h>
|
||||
#include <mach/mux.h>
|
||||
#include <mach/sram.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
|
|
@ -47,13 +47,9 @@ static void __raw_writel(unsigned int value, unsigned int ptr)
|
|||
|
||||
static inline void putc(int c)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
/* Transmit fifo not full? */
|
||||
if (!(__raw_readb(PHYS_UART_FLAG) & UART_FLAG_TXFF))
|
||||
break;
|
||||
}
|
||||
/* Transmit fifo not full? */
|
||||
while (__raw_readb(PHYS_UART_FLAG) & UART_FLAG_TXFF)
|
||||
;
|
||||
|
||||
__raw_writeb(c, PHYS_UART_DATA);
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ void exynos_init_late(void);
|
|||
#ifdef CONFIG_PM_GENERIC_DOMAINS
|
||||
int exynos_pm_late_initcall(void);
|
||||
#else
|
||||
static int exynos_pm_late_initcall(void) { return 0; }
|
||||
static inline int exynos_pm_late_initcall(void) { return 0; }
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_EXYNOS4
|
||||
|
|
|
@ -319,6 +319,7 @@ int __init mx51_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,
|
|||
unsigned long rate_ckih1, unsigned long rate_ckih2)
|
||||
{
|
||||
int i;
|
||||
u32 val;
|
||||
struct device_node *np;
|
||||
|
||||
clk[pll1_sw] = imx_clk_pllv2("pll1_sw", "osc", MX51_DPLL1_BASE);
|
||||
|
@ -390,6 +391,21 @@ int __init mx51_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,
|
|||
imx_print_silicon_rev("i.MX51", mx51_revision());
|
||||
clk_disable_unprepare(clk[iim_gate]);
|
||||
|
||||
/*
|
||||
* Reference Manual says: Functionality of CCDR[18] and CLPCR[23] is no
|
||||
* longer supported. Set to one for better power saving.
|
||||
*
|
||||
* The effect of not setting these bits is that MIPI clocks can't be
|
||||
* enabled without the IPU clock being enabled aswell.
|
||||
*/
|
||||
val = readl(MXC_CCM_CCDR);
|
||||
val |= 1 << 18;
|
||||
writel(val, MXC_CCM_CCDR);
|
||||
|
||||
val = readl(MXC_CCM_CLPCR);
|
||||
val |= 1 << 23;
|
||||
writel(val, MXC_CCM_CLPCR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
* the terms of the GNU General Public License version 2 as published by the
|
||||
* Free Software Foundation.
|
||||
*/
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/devices-common.h>
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
#define imx_mx2_emmaprp_data_entry_single(soc) \
|
||||
{ \
|
|
@ -26,6 +26,8 @@ config SOC_HAS_OMAP2_SDRC
|
|||
|
||||
config SOC_HAS_REALTIME_COUNTER
|
||||
bool "Real time free running counter"
|
||||
depends on SOC_OMAP5
|
||||
default y
|
||||
|
||||
config ARCH_OMAP2
|
||||
bool "TI OMAP2"
|
||||
|
@ -79,7 +81,6 @@ config SOC_OMAP5
|
|||
select ARM_GIC
|
||||
select CPU_V7
|
||||
select HAVE_SMP
|
||||
select SOC_HAS_REALTIME_COUNTER
|
||||
select COMMON_CLK
|
||||
|
||||
comment "OMAP Core Type"
|
||||
|
|
|
@ -157,6 +157,7 @@ static struct omap_dss_device sdp3430_lcd_device = {
|
|||
|
||||
static struct tfp410_platform_data dvi_panel = {
|
||||
.power_down_gpio = -1,
|
||||
.i2c_bus_num = -1,
|
||||
};
|
||||
|
||||
static struct omap_dss_device sdp3430_dvi_device = {
|
||||
|
|
|
@ -208,6 +208,7 @@ static struct omap_dss_device am3517_evm_tv_device = {
|
|||
|
||||
static struct tfp410_platform_data dvi_panel = {
|
||||
.power_down_gpio = -1,
|
||||
.i2c_bus_num = -1,
|
||||
};
|
||||
|
||||
static struct omap_dss_device am3517_evm_dvi_device = {
|
||||
|
|
|
@ -241,6 +241,7 @@ static struct omap_dss_device cm_t35_lcd_device = {
|
|||
|
||||
static struct tfp410_platform_data dvi_panel = {
|
||||
.power_down_gpio = CM_T35_DVI_EN_GPIO,
|
||||
.i2c_bus_num = -1,
|
||||
};
|
||||
|
||||
static struct omap_dss_device cm_t35_dvi_device = {
|
||||
|
|
|
@ -141,6 +141,7 @@ static struct omap_dss_device devkit8000_lcd_device = {
|
|||
|
||||
static struct tfp410_platform_data dvi_panel = {
|
||||
.power_down_gpio = -1,
|
||||
.i2c_bus_num = 1,
|
||||
};
|
||||
|
||||
static struct omap_dss_device devkit8000_dvi_device = {
|
||||
|
|
|
@ -27,14 +27,12 @@
|
|||
#include <linux/io.h>
|
||||
#include <linux/input/matrix_keypad.h>
|
||||
#include <linux/mfd/menelaus.h>
|
||||
#include <linux/omap-dma.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <linux/omap-dma.h>
|
||||
#include <plat/debug-devices.h>
|
||||
|
||||
#include <video/omapdss.h>
|
||||
#include <video/omap-panel-generic-dpi.h>
|
||||
|
||||
|
@ -42,11 +40,9 @@
|
|||
#include "mux.h"
|
||||
#include "control.h"
|
||||
#include "gpmc.h"
|
||||
#include "gpmc-smc91x.h"
|
||||
|
||||
#define H4_FLASH_CS 0
|
||||
#define H4_SMC91X_CS 1
|
||||
|
||||
#define H4_ETHR_GPIO_IRQ 92
|
||||
|
||||
#if defined(CONFIG_KEYBOARD_MATRIX) || defined(CONFIG_KEYBOARD_MATRIX_MODULE)
|
||||
static const uint32_t board_matrix_keys[] = {
|
||||
|
@ -250,71 +246,31 @@ static u32 is_gpmc_muxed(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline void __init h4_init_debug(void)
|
||||
#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91x_MODULE)
|
||||
|
||||
static struct omap_smc91x_platform_data board_smc91x_data = {
|
||||
.cs = 1,
|
||||
.gpio_irq = 92,
|
||||
.flags = GPMC_TIMINGS_SMC91C96 | IORESOURCE_IRQ_LOWLEVEL,
|
||||
};
|
||||
|
||||
static void __init board_smc91x_init(void)
|
||||
{
|
||||
int eth_cs;
|
||||
unsigned long cs_mem_base;
|
||||
unsigned int muxed, rate;
|
||||
struct clk *gpmc_fck;
|
||||
|
||||
eth_cs = H4_SMC91X_CS;
|
||||
|
||||
gpmc_fck = clk_get(NULL, "gpmc_fck"); /* Always on ENABLE_ON_INIT */
|
||||
if (IS_ERR(gpmc_fck)) {
|
||||
WARN_ON(1);
|
||||
return;
|
||||
}
|
||||
|
||||
clk_prepare_enable(gpmc_fck);
|
||||
rate = clk_get_rate(gpmc_fck);
|
||||
clk_disable_unprepare(gpmc_fck);
|
||||
clk_put(gpmc_fck);
|
||||
|
||||
if (is_gpmc_muxed())
|
||||
muxed = 0x200;
|
||||
else
|
||||
muxed = 0;
|
||||
board_smc91x_data.flags |= GPMC_MUX_ADD_DATA;
|
||||
|
||||
/* Make sure CS1 timings are correct */
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG1,
|
||||
0x00011000 | muxed);
|
||||
|
||||
if (rate >= 160000000) {
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG2, 0x001f1f01);
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG3, 0x00080803);
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG4, 0x1c0b1c0a);
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG5, 0x041f1F1F);
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG6, 0x000004C4);
|
||||
} else if (rate >= 130000000) {
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG2, 0x001f1f00);
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG3, 0x00080802);
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG4, 0x1C091C09);
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG5, 0x041f1F1F);
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG6, 0x000004C4);
|
||||
} else {/* rate = 100000000 */
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG2, 0x001f1f00);
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG3, 0x00080802);
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG4, 0x1C091C09);
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG5, 0x031A1F1F);
|
||||
gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG6, 0x000003C2);
|
||||
}
|
||||
|
||||
if (gpmc_cs_request(eth_cs, SZ_16M, &cs_mem_base) < 0) {
|
||||
printk(KERN_ERR "Failed to request GPMC mem for smc91x\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
udelay(100);
|
||||
|
||||
omap_mux_init_gpio(92, 0);
|
||||
if (debug_card_init(cs_mem_base, H4_ETHR_GPIO_IRQ) < 0)
|
||||
gpmc_cs_free(eth_cs);
|
||||
|
||||
out:
|
||||
clk_disable_unprepare(gpmc_fck);
|
||||
clk_put(gpmc_fck);
|
||||
omap_mux_init_gpio(board_smc91x_data.gpio_irq, OMAP_PIN_INPUT);
|
||||
gpmc_smc91x_init(&board_smc91x_data);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static inline void board_smc91x_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static void __init h4_init_flash(void)
|
||||
{
|
||||
unsigned long base;
|
||||
|
@ -371,6 +327,7 @@ static void __init omap_h4_init(void)
|
|||
omap_serial_init();
|
||||
omap_sdrc_init(NULL, NULL);
|
||||
h4_init_flash();
|
||||
board_smc91x_init();
|
||||
|
||||
omap_display_init(&h4_dss_data);
|
||||
}
|
||||
|
|
|
@ -240,6 +240,7 @@ static struct omap_dss_device omap3_evm_tv_device = {
|
|||
|
||||
static struct tfp410_platform_data dvi_panel = {
|
||||
.power_down_gpio = OMAP3EVM_DVI_PANEL_EN_GPIO,
|
||||
.i2c_bus_num = -1,
|
||||
};
|
||||
|
||||
static struct omap_dss_device omap3_evm_dvi_device = {
|
||||
|
|
|
@ -118,6 +118,7 @@ static struct omap_dss_device omap3_stalker_tv_device = {
|
|||
|
||||
static struct tfp410_platform_data dvi_panel = {
|
||||
.power_down_gpio = DSS_ENABLE_GPIO,
|
||||
.i2c_bus_num = -1,
|
||||
};
|
||||
|
||||
static struct omap_dss_device omap3_stalker_dvi_device = {
|
||||
|
|
|
@ -40,6 +40,14 @@
|
|||
#define OMAP4430_MODULEMODE_HWCTRL_SHIFT 0
|
||||
#define OMAP4430_MODULEMODE_SWCTRL_SHIFT 1
|
||||
|
||||
/*
|
||||
* OMAP4 ABE DPLL default frequency. In OMAP4460 TRM version V, section
|
||||
* "3.6.3.2.3 CM1_ABE Clock Generator" states that the "DPLL_ABE_X2_CLK
|
||||
* must be set to 196.608 MHz" and hence, the DPLL locked frequency is
|
||||
* half of this value.
|
||||
*/
|
||||
#define OMAP4_DPLL_ABE_DEFFREQ 98304000
|
||||
|
||||
/* Root clocks */
|
||||
|
||||
DEFINE_CLK_FIXED_RATE(extalt_clkin_ck, CLK_IS_ROOT, 59000000, 0x0);
|
||||
|
@ -124,6 +132,8 @@ static struct dpll_data dpll_abe_dd = {
|
|||
.enable_mask = OMAP4430_DPLL_EN_MASK,
|
||||
.autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
|
||||
.idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
|
||||
.m4xen_mask = OMAP4430_DPLL_REGM4XEN_MASK,
|
||||
.lpmode_mask = OMAP4430_DPLL_LPMODE_EN_MASK,
|
||||
.max_multiplier = 2047,
|
||||
.max_divider = 128,
|
||||
.min_divider = 1,
|
||||
|
@ -233,7 +243,7 @@ static struct dpll_data dpll_core_dd = {
|
|||
|
||||
|
||||
static const char *dpll_core_ck_parents[] = {
|
||||
"sys_clkin_ck",
|
||||
"sys_clkin_ck", "core_hsd_byp_clk_mux_ck"
|
||||
};
|
||||
|
||||
static struct clk dpll_core_ck;
|
||||
|
@ -286,9 +296,9 @@ DEFINE_CLK_DIVIDER(div_core_ck, "dpll_core_m5x2_ck", &dpll_core_m5x2_ck, 0x0,
|
|||
OMAP4430_CM_CLKSEL_CORE, OMAP4430_CLKSEL_CORE_SHIFT,
|
||||
OMAP4430_CLKSEL_CORE_WIDTH, 0x0, NULL);
|
||||
|
||||
DEFINE_CLK_OMAP_HSDIVIDER(div_iva_hs_clk, "dpll_core_m5x2_ck",
|
||||
&dpll_core_m5x2_ck, 0x0, OMAP4430_CM_BYPCLK_DPLL_IVA,
|
||||
OMAP4430_CLKSEL_0_1_MASK);
|
||||
DEFINE_CLK_DIVIDER(div_iva_hs_clk, "dpll_core_m5x2_ck", &dpll_core_m5x2_ck,
|
||||
0x0, OMAP4430_CM_BYPCLK_DPLL_IVA, OMAP4430_CLKSEL_0_1_SHIFT,
|
||||
OMAP4430_CLKSEL_0_1_WIDTH, CLK_DIVIDER_POWER_OF_TWO, NULL);
|
||||
|
||||
DEFINE_CLK_DIVIDER(div_mpu_hs_clk, "dpll_core_m5x2_ck", &dpll_core_m5x2_ck,
|
||||
0x0, OMAP4430_CM_BYPCLK_DPLL_MPU, OMAP4430_CLKSEL_0_1_SHIFT,
|
||||
|
@ -363,8 +373,21 @@ static struct dpll_data dpll_iva_dd = {
|
|||
.min_divider = 1,
|
||||
};
|
||||
|
||||
static const char *dpll_iva_ck_parents[] = {
|
||||
"sys_clkin_ck", "iva_hsd_byp_clk_mux_ck"
|
||||
};
|
||||
|
||||
static struct clk dpll_iva_ck;
|
||||
|
||||
static const struct clk_ops dpll_ck_ops = {
|
||||
.enable = &omap3_noncore_dpll_enable,
|
||||
.disable = &omap3_noncore_dpll_disable,
|
||||
.recalc_rate = &omap3_dpll_recalc,
|
||||
.round_rate = &omap2_dpll_round_rate,
|
||||
.set_rate = &omap3_noncore_dpll_set_rate,
|
||||
.get_parent = &omap2_init_dpll_parent,
|
||||
};
|
||||
|
||||
static struct clk_hw_omap dpll_iva_ck_hw = {
|
||||
.hw = {
|
||||
.clk = &dpll_iva_ck,
|
||||
|
@ -373,7 +396,7 @@ static struct clk_hw_omap dpll_iva_ck_hw = {
|
|||
.ops = &clkhwops_omap3_dpll,
|
||||
};
|
||||
|
||||
DEFINE_STRUCT_CLK(dpll_iva_ck, dpll_core_ck_parents, dpll_abe_ck_ops);
|
||||
DEFINE_STRUCT_CLK(dpll_iva_ck, dpll_iva_ck_parents, dpll_ck_ops);
|
||||
|
||||
static const char *dpll_iva_x2_ck_parents[] = {
|
||||
"dpll_iva_ck",
|
||||
|
@ -416,6 +439,10 @@ static struct dpll_data dpll_mpu_dd = {
|
|||
.min_divider = 1,
|
||||
};
|
||||
|
||||
static const char *dpll_mpu_ck_parents[] = {
|
||||
"sys_clkin_ck", "div_mpu_hs_clk"
|
||||
};
|
||||
|
||||
static struct clk dpll_mpu_ck;
|
||||
|
||||
static struct clk_hw_omap dpll_mpu_ck_hw = {
|
||||
|
@ -426,7 +453,7 @@ static struct clk_hw_omap dpll_mpu_ck_hw = {
|
|||
.ops = &clkhwops_omap3_dpll,
|
||||
};
|
||||
|
||||
DEFINE_STRUCT_CLK(dpll_mpu_ck, dpll_core_ck_parents, dpll_abe_ck_ops);
|
||||
DEFINE_STRUCT_CLK(dpll_mpu_ck, dpll_mpu_ck_parents, dpll_ck_ops);
|
||||
|
||||
DEFINE_CLK_FIXED_FACTOR(mpu_periphclk, "dpll_mpu_ck", &dpll_mpu_ck, 0x0, 1, 2);
|
||||
|
||||
|
@ -464,6 +491,9 @@ static struct dpll_data dpll_per_dd = {
|
|||
.min_divider = 1,
|
||||
};
|
||||
|
||||
static const char *dpll_per_ck_parents[] = {
|
||||
"sys_clkin_ck", "per_hsd_byp_clk_mux_ck"
|
||||
};
|
||||
|
||||
static struct clk dpll_per_ck;
|
||||
|
||||
|
@ -475,7 +505,7 @@ static struct clk_hw_omap dpll_per_ck_hw = {
|
|||
.ops = &clkhwops_omap3_dpll,
|
||||
};
|
||||
|
||||
DEFINE_STRUCT_CLK(dpll_per_ck, dpll_core_ck_parents, dpll_abe_ck_ops);
|
||||
DEFINE_STRUCT_CLK(dpll_per_ck, dpll_per_ck_parents, dpll_ck_ops);
|
||||
|
||||
DEFINE_CLK_DIVIDER(dpll_per_m2_ck, "dpll_per_ck", &dpll_per_ck, 0x0,
|
||||
OMAP4430_CM_DIV_M2_DPLL_PER, OMAP4430_DPLL_CLKOUT_DIV_SHIFT,
|
||||
|
@ -559,6 +589,10 @@ static struct dpll_data dpll_usb_dd = {
|
|||
.min_divider = 1,
|
||||
};
|
||||
|
||||
static const char *dpll_usb_ck_parents[] = {
|
||||
"sys_clkin_ck", "usb_hs_clk_div_ck"
|
||||
};
|
||||
|
||||
static struct clk dpll_usb_ck;
|
||||
|
||||
static struct clk_hw_omap dpll_usb_ck_hw = {
|
||||
|
@ -569,7 +603,7 @@ static struct clk_hw_omap dpll_usb_ck_hw = {
|
|||
.ops = &clkhwops_omap3_dpll,
|
||||
};
|
||||
|
||||
DEFINE_STRUCT_CLK(dpll_usb_ck, dpll_core_ck_parents, dpll_abe_ck_ops);
|
||||
DEFINE_STRUCT_CLK(dpll_usb_ck, dpll_usb_ck_parents, dpll_ck_ops);
|
||||
|
||||
static const char *dpll_usb_clkdcoldo_ck_parents[] = {
|
||||
"dpll_usb_ck",
|
||||
|
@ -696,9 +730,13 @@ DEFINE_CLK_DIVIDER(syc_clk_div_ck, "sys_clkin_ck", &sys_clkin_ck, 0x0,
|
|||
OMAP4430_CM_ABE_DSS_SYS_CLKSEL, OMAP4430_CLKSEL_0_0_SHIFT,
|
||||
OMAP4430_CLKSEL_0_0_WIDTH, 0x0, NULL);
|
||||
|
||||
static const char *dbgclk_mux_ck_parents[] = {
|
||||
"sys_clkin_ck"
|
||||
};
|
||||
|
||||
static struct clk dbgclk_mux_ck;
|
||||
DEFINE_STRUCT_CLK_HW_OMAP(dbgclk_mux_ck, NULL);
|
||||
DEFINE_STRUCT_CLK(dbgclk_mux_ck, dpll_core_ck_parents,
|
||||
DEFINE_STRUCT_CLK(dbgclk_mux_ck, dbgclk_mux_ck_parents,
|
||||
dpll_usb_clkdcoldo_ck_ops);
|
||||
|
||||
/* Leaf clocks controlled by modules */
|
||||
|
@ -1935,10 +1973,10 @@ static struct omap_clk omap44xx_clks[] = {
|
|||
CLK("4803e000.timer", "timer_sys_ck", &sys_clkin_ck, CK_443X),
|
||||
CLK("48086000.timer", "timer_sys_ck", &sys_clkin_ck, CK_443X),
|
||||
CLK("48088000.timer", "timer_sys_ck", &sys_clkin_ck, CK_443X),
|
||||
CLK("49038000.timer", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
|
||||
CLK("4903a000.timer", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
|
||||
CLK("4903c000.timer", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
|
||||
CLK("4903e000.timer", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
|
||||
CLK("40138000.timer", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
|
||||
CLK("4013a000.timer", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
|
||||
CLK("4013c000.timer", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
|
||||
CLK("4013e000.timer", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
|
||||
CLK(NULL, "cpufreq_ck", &dpll_mpu_ck, CK_443X),
|
||||
};
|
||||
|
||||
|
@ -1955,6 +1993,7 @@ int __init omap4xxx_clk_init(void)
|
|||
{
|
||||
u32 cpu_clkflg;
|
||||
struct omap_clk *c;
|
||||
int rc;
|
||||
|
||||
if (cpu_is_omap443x()) {
|
||||
cpu_mask = RATE_IN_4430;
|
||||
|
@ -1983,5 +2022,18 @@ int __init omap4xxx_clk_init(void)
|
|||
omap2_clk_enable_init_clocks(enable_init_clks,
|
||||
ARRAY_SIZE(enable_init_clks));
|
||||
|
||||
/*
|
||||
* On OMAP4460 the ABE DPLL fails to turn on if in idle low-power
|
||||
* state when turning the ABE clock domain. Workaround this by
|
||||
* locking the ABE DPLL on boot.
|
||||
*/
|
||||
if (cpu_is_omap446x()) {
|
||||
rc = clk_set_parent(&abe_dpll_refclk_mux_ck, &sys_32k_ck);
|
||||
if (!rc)
|
||||
rc = clk_set_rate(&dpll_abe_ck, OMAP4_DPLL_ABE_DEFFREQ);
|
||||
if (rc)
|
||||
pr_err("%s: failed to configure ABE DPLL!\n", __func__);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -195,6 +195,10 @@ struct clksel {
|
|||
* @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()
|
||||
* @last_rounded_m4xen: cache of the last M4X result of
|
||||
* omap4_dpll_regm4xen_round_rate()
|
||||
* @last_rounded_lpmode: cache of the last lpmode result of
|
||||
* omap4_dpll_lpmode_recalc()
|
||||
* @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)
|
||||
|
@ -205,6 +209,8 @@ struct clksel {
|
|||
* @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
|
||||
* @lpmode_mask: mask of the DPLL low-power mode bitfield in @control_reg
|
||||
* @m4xen_mask: mask of the DPLL M4X multiplier bitfield in @control_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
|
||||
|
@ -233,6 +239,8 @@ struct dpll_data {
|
|||
u32 enable_mask;
|
||||
unsigned long last_rounded_rate;
|
||||
u16 last_rounded_m;
|
||||
u8 last_rounded_m4xen;
|
||||
u8 last_rounded_lpmode;
|
||||
u16 max_multiplier;
|
||||
u8 last_rounded_n;
|
||||
u8 min_divider;
|
||||
|
@ -245,6 +253,8 @@ struct dpll_data {
|
|||
u32 idlest_mask;
|
||||
u32 dco_mask;
|
||||
u32 sddiv_mask;
|
||||
u32 lpmode_mask;
|
||||
u32 m4xen_mask;
|
||||
u8 auto_recal_bit;
|
||||
u8 recal_en_bit;
|
||||
u8 recal_st_bit;
|
||||
|
|
|
@ -998,7 +998,8 @@ int clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk)
|
|||
spin_lock_irqsave(&clkdm->lock, flags);
|
||||
|
||||
/* corner case: disabling unused clocks */
|
||||
if (__clk_get_enable_count(clk) == 0)
|
||||
if ((__clk_get_enable_count(clk) == 0) &&
|
||||
(atomic_read(&clkdm->usecount) == 0))
|
||||
goto ccd_exit;
|
||||
|
||||
if (atomic_read(&clkdm->usecount) == 0) {
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/platform_data/dsp-omap.h>
|
||||
|
||||
#include <plat/vram.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "omap-secure.h"
|
||||
|
||||
|
@ -32,7 +30,6 @@ int __weak omap_secure_ram_reserve_memblock(void)
|
|||
|
||||
void __init omap_reserve(void)
|
||||
{
|
||||
omap_vram_reserve_sdram_memblock();
|
||||
omap_dsp_reserve_sdram_memblock();
|
||||
omap_secure_ram_reserve_memblock();
|
||||
omap_barrier_reserve_memblock();
|
||||
|
|
|
@ -40,6 +40,8 @@ struct omap3_idle_statedata {
|
|||
u32 core_state;
|
||||
};
|
||||
|
||||
static struct powerdomain *mpu_pd, *core_pd, *per_pd, *cam_pd;
|
||||
|
||||
static struct omap3_idle_statedata omap3_idle_data[] = {
|
||||
{
|
||||
.mpu_state = PWRDM_POWER_ON,
|
||||
|
@ -71,7 +73,7 @@ static struct omap3_idle_statedata omap3_idle_data[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct powerdomain *mpu_pd, *core_pd, *per_pd, *cam_pd;
|
||||
/* Private functions */
|
||||
|
||||
static int __omap3_enter_idle(struct cpuidle_device *dev,
|
||||
struct cpuidle_driver *drv,
|
||||
|
@ -260,11 +262,11 @@ static int omap3_enter_idle_bm(struct cpuidle_device *dev,
|
|||
return ret;
|
||||
}
|
||||
|
||||
DEFINE_PER_CPU(struct cpuidle_device, omap3_idle_dev);
|
||||
static DEFINE_PER_CPU(struct cpuidle_device, omap3_idle_dev);
|
||||
|
||||
struct cpuidle_driver omap3_idle_driver = {
|
||||
.name = "omap3_idle",
|
||||
.owner = THIS_MODULE,
|
||||
static struct cpuidle_driver omap3_idle_driver = {
|
||||
.name = "omap3_idle",
|
||||
.owner = THIS_MODULE,
|
||||
.states = {
|
||||
{
|
||||
.enter = omap3_enter_idle_bm,
|
||||
|
@ -327,6 +329,8 @@ struct cpuidle_driver omap3_idle_driver = {
|
|||
.safe_state_index = 0,
|
||||
};
|
||||
|
||||
/* Public functions */
|
||||
|
||||
/**
|
||||
* omap3_idle_init - Init routine for OMAP3 idle
|
||||
*
|
||||
|
|
|
@ -54,6 +54,8 @@ static struct clockdomain *cpu_clkdm[NR_CPUS];
|
|||
static atomic_t abort_barrier;
|
||||
static bool cpu_done[NR_CPUS];
|
||||
|
||||
/* Private functions */
|
||||
|
||||
/**
|
||||
* omap4_enter_idle_coupled_[simple/coupled] - OMAP4 cpuidle entry functions
|
||||
* @dev: cpuidle device
|
||||
|
@ -161,9 +163,19 @@ fail:
|
|||
return index;
|
||||
}
|
||||
|
||||
DEFINE_PER_CPU(struct cpuidle_device, omap4_idle_dev);
|
||||
/*
|
||||
* For each cpu, setup the broadcast timer because local timers
|
||||
* stops for the states above C1.
|
||||
*/
|
||||
static void omap_setup_broadcast_timer(void *arg)
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ON, &cpu);
|
||||
}
|
||||
|
||||
struct cpuidle_driver omap4_idle_driver = {
|
||||
static DEFINE_PER_CPU(struct cpuidle_device, omap4_idle_dev);
|
||||
|
||||
static struct cpuidle_driver omap4_idle_driver = {
|
||||
.name = "omap4_idle",
|
||||
.owner = THIS_MODULE,
|
||||
.en_core_tk_irqen = 1,
|
||||
|
@ -178,7 +190,7 @@ struct cpuidle_driver omap4_idle_driver = {
|
|||
.desc = "MPUSS ON"
|
||||
},
|
||||
{
|
||||
/* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */
|
||||
/* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */
|
||||
.exit_latency = 328 + 440,
|
||||
.target_residency = 960,
|
||||
.flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED,
|
||||
|
@ -200,15 +212,7 @@ struct cpuidle_driver omap4_idle_driver = {
|
|||
.safe_state_index = 0,
|
||||
};
|
||||
|
||||
/*
|
||||
* For each cpu, setup the broadcast timer because local timers
|
||||
* stops for the states above C1.
|
||||
*/
|
||||
static void omap_setup_broadcast_timer(void *arg)
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ON, &cpu);
|
||||
}
|
||||
/* Public functions */
|
||||
|
||||
/**
|
||||
* omap4_idle_init - Init routine for OMAP4 idle
|
||||
|
|
|
@ -291,16 +291,13 @@ static void _lookup_sddiv(struct clk_hw_omap *clk, u8 *sd_div, u16 m, u8 n)
|
|||
|
||||
/*
|
||||
* _omap3_noncore_dpll_program - set non-core DPLL M,N values directly
|
||||
* @clk: struct clk * of DPLL to set
|
||||
* @m: DPLL multiplier to set
|
||||
* @n: DPLL divider to set
|
||||
* @freqsel: FREQSEL value to set
|
||||
* @clk: struct clk * of DPLL to set
|
||||
* @freqsel: FREQSEL value to set
|
||||
*
|
||||
* Program the DPLL with the supplied M, N values, and wait for the DPLL to
|
||||
* lock.. Returns -EINVAL upon error, or 0 upon success.
|
||||
* Program the DPLL with the last M, N values calculated, and wait for
|
||||
* the DPLL to lock. Returns -EINVAL upon error, or 0 upon success.
|
||||
*/
|
||||
static int omap3_noncore_dpll_program(struct clk_hw_omap *clk, u16 m, u8 n,
|
||||
u16 freqsel)
|
||||
static int omap3_noncore_dpll_program(struct clk_hw_omap *clk, u16 freqsel)
|
||||
{
|
||||
struct dpll_data *dd = clk->dpll_data;
|
||||
u8 dco, sd_div;
|
||||
|
@ -323,23 +320,45 @@ static int omap3_noncore_dpll_program(struct clk_hw_omap *clk, u16 m, u8 n,
|
|||
/* Set DPLL multiplier, divider */
|
||||
v = __raw_readl(dd->mult_div1_reg);
|
||||
v &= ~(dd->mult_mask | dd->div1_mask);
|
||||
v |= m << __ffs(dd->mult_mask);
|
||||
v |= (n - 1) << __ffs(dd->div1_mask);
|
||||
v |= dd->last_rounded_m << __ffs(dd->mult_mask);
|
||||
v |= (dd->last_rounded_n - 1) << __ffs(dd->div1_mask);
|
||||
|
||||
/* Configure dco and sd_div for dplls that have these fields */
|
||||
if (dd->dco_mask) {
|
||||
_lookup_dco(clk, &dco, m, n);
|
||||
_lookup_dco(clk, &dco, dd->last_rounded_m, dd->last_rounded_n);
|
||||
v &= ~(dd->dco_mask);
|
||||
v |= dco << __ffs(dd->dco_mask);
|
||||
}
|
||||
if (dd->sddiv_mask) {
|
||||
_lookup_sddiv(clk, &sd_div, m, n);
|
||||
_lookup_sddiv(clk, &sd_div, dd->last_rounded_m,
|
||||
dd->last_rounded_n);
|
||||
v &= ~(dd->sddiv_mask);
|
||||
v |= sd_div << __ffs(dd->sddiv_mask);
|
||||
}
|
||||
|
||||
__raw_writel(v, dd->mult_div1_reg);
|
||||
|
||||
/* Set 4X multiplier and low-power mode */
|
||||
if (dd->m4xen_mask || dd->lpmode_mask) {
|
||||
v = __raw_readl(dd->control_reg);
|
||||
|
||||
if (dd->m4xen_mask) {
|
||||
if (dd->last_rounded_m4xen)
|
||||
v |= dd->m4xen_mask;
|
||||
else
|
||||
v &= ~dd->m4xen_mask;
|
||||
}
|
||||
|
||||
if (dd->lpmode_mask) {
|
||||
if (dd->last_rounded_lpmode)
|
||||
v |= dd->lpmode_mask;
|
||||
else
|
||||
v &= ~dd->lpmode_mask;
|
||||
}
|
||||
|
||||
__raw_writel(v, dd->control_reg);
|
||||
}
|
||||
|
||||
/* We let the clock framework set the other output dividers later */
|
||||
|
||||
/* REVISIT: Set ramp-up delay? */
|
||||
|
@ -492,8 +511,7 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate,
|
|||
pr_debug("%s: %s: set rate: locking rate to %lu.\n",
|
||||
__func__, __clk_get_name(hw->clk), rate);
|
||||
|
||||
ret = omap3_noncore_dpll_program(clk, dd->last_rounded_m,
|
||||
dd->last_rounded_n, freqsel);
|
||||
ret = omap3_noncore_dpll_program(clk, freqsel);
|
||||
if (!ret)
|
||||
new_parent = dd->clk_ref;
|
||||
}
|
||||
|
|
|
@ -20,6 +20,15 @@
|
|||
#include "clock44xx.h"
|
||||
#include "cm-regbits-44xx.h"
|
||||
|
||||
/*
|
||||
* Maximum DPLL input frequency (FINT) and output frequency (FOUT) that
|
||||
* can supported when using the DPLL low-power mode. Frequencies are
|
||||
* defined in OMAP4430/60 Public TRM section 3.6.3.3.2 "Enable Control,
|
||||
* Status, and Low-Power Operation Mode".
|
||||
*/
|
||||
#define OMAP4_DPLL_LP_FINT_MAX 1000000
|
||||
#define OMAP4_DPLL_LP_FOUT_MAX 100000000
|
||||
|
||||
/* Supported only on OMAP4 */
|
||||
int omap4_dpllmx_gatectrl_read(struct clk_hw_omap *clk)
|
||||
{
|
||||
|
@ -81,6 +90,31 @@ const struct clk_hw_omap_ops clkhwops_omap4_dpllmx = {
|
|||
.deny_idle = omap4_dpllmx_deny_gatectrl,
|
||||
};
|
||||
|
||||
/**
|
||||
* omap4_dpll_lpmode_recalc - compute DPLL low-power setting
|
||||
* @dd: pointer to the dpll data structure
|
||||
*
|
||||
* Calculates if low-power mode can be enabled based upon the last
|
||||
* multiplier and divider values calculated. If low-power mode can be
|
||||
* enabled, then the bit to enable low-power mode is stored in the
|
||||
* last_rounded_lpmode variable. This implementation is based upon the
|
||||
* criteria for enabling low-power mode as described in the OMAP4430/60
|
||||
* Public TRM section 3.6.3.3.2 "Enable Control, Status, and Low-Power
|
||||
* Operation Mode".
|
||||
*/
|
||||
static void omap4_dpll_lpmode_recalc(struct dpll_data *dd)
|
||||
{
|
||||
long fint, fout;
|
||||
|
||||
fint = __clk_get_rate(dd->clk_ref) / (dd->last_rounded_n + 1);
|
||||
fout = fint * dd->last_rounded_m;
|
||||
|
||||
if ((fint < OMAP4_DPLL_LP_FINT_MAX) && (fout < OMAP4_DPLL_LP_FOUT_MAX))
|
||||
dd->last_rounded_lpmode = 1;
|
||||
else
|
||||
dd->last_rounded_lpmode = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* omap4_dpll_regm4xen_recalc - compute DPLL rate, considering REGM4XEN bit
|
||||
* @clk: struct clk * of the DPLL to compute the rate for
|
||||
|
@ -130,7 +164,6 @@ long omap4_dpll_regm4xen_round_rate(struct clk_hw *hw,
|
|||
unsigned long *parent_rate)
|
||||
{
|
||||
struct clk_hw_omap *clk = to_clk_hw_omap(hw);
|
||||
u32 v;
|
||||
struct dpll_data *dd;
|
||||
long r;
|
||||
|
||||
|
@ -139,18 +172,31 @@ long omap4_dpll_regm4xen_round_rate(struct clk_hw *hw,
|
|||
|
||||
dd = clk->dpll_data;
|
||||
|
||||
/* regm4xen adds a multiplier of 4 to DPLL calculations */
|
||||
v = __raw_readl(dd->control_reg) & OMAP4430_DPLL_REGM4XEN_MASK;
|
||||
|
||||
if (v)
|
||||
target_rate = target_rate / OMAP4430_REGM4XEN_MULT;
|
||||
dd->last_rounded_m4xen = 0;
|
||||
|
||||
/*
|
||||
* First try to compute the DPLL configuration for
|
||||
* target rate without using the 4X multiplier.
|
||||
*/
|
||||
r = omap2_dpll_round_rate(hw, target_rate, NULL);
|
||||
if (r != ~0)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* If we did not find a valid DPLL configuration, try again, but
|
||||
* this time see if using the 4X multiplier can help. Enabling the
|
||||
* 4X multiplier is equivalent to dividing the target rate by 4.
|
||||
*/
|
||||
r = omap2_dpll_round_rate(hw, target_rate / OMAP4430_REGM4XEN_MULT,
|
||||
NULL);
|
||||
if (r == ~0)
|
||||
return r;
|
||||
|
||||
if (v)
|
||||
clk->dpll_data->last_rounded_rate *= OMAP4430_REGM4XEN_MULT;
|
||||
dd->last_rounded_rate *= OMAP4430_REGM4XEN_MULT;
|
||||
dd->last_rounded_m4xen = 1;
|
||||
|
||||
return clk->dpll_data->last_rounded_rate;
|
||||
out:
|
||||
omap4_dpll_lpmode_recalc(dd);
|
||||
|
||||
return dd->last_rounded_rate;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "soc.h"
|
||||
#include "omap_hwmod.h"
|
||||
#include "omap_device.h"
|
||||
#include "omap-pm.h"
|
||||
|
||||
#include "prm.h"
|
||||
#include "common.h"
|
||||
|
|
|
@ -135,10 +135,7 @@ static int __init _omap_mux_init_gpio(struct omap_mux_partition *partition,
|
|||
|
||||
old_mode = omap_mux_read(partition, gpio_mux->reg_offset);
|
||||
mux_mode = val & ~(OMAP_MUX_NR_MODES - 1);
|
||||
if (partition->flags & OMAP_MUX_GPIO_IN_MODE3)
|
||||
mux_mode |= OMAP_MUX_MODE3;
|
||||
else
|
||||
mux_mode |= OMAP_MUX_MODE4;
|
||||
mux_mode |= partition->gpio;
|
||||
pr_debug("%s: Setting signal %s.gpio%i 0x%04x -> 0x%04x\n", __func__,
|
||||
gpio_mux->muxnames[0], gpio, old_mode, mux_mode);
|
||||
omap_mux_write(partition, mux_mode, gpio_mux->reg_offset);
|
||||
|
@ -800,7 +797,7 @@ int __init omap_mux_late_init(void)
|
|||
struct omap_mux *m = &e->mux;
|
||||
u16 mode = omap_mux_read(partition, m->reg_offset);
|
||||
|
||||
if (OMAP_MODE_GPIO(mode))
|
||||
if (OMAP_MODE_GPIO(partition, mode))
|
||||
continue;
|
||||
|
||||
#ifndef CONFIG_DEBUG_FS
|
||||
|
@ -1065,7 +1062,7 @@ static void __init omap_mux_init_list(struct omap_mux_partition *partition,
|
|||
}
|
||||
#else
|
||||
/* Skip pins that are not muxed as GPIO by bootloader */
|
||||
if (!OMAP_MODE_GPIO(omap_mux_read(partition,
|
||||
if (!OMAP_MODE_GPIO(partition, omap_mux_read(partition,
|
||||
superset->reg_offset))) {
|
||||
superset++;
|
||||
continue;
|
||||
|
@ -1132,6 +1129,7 @@ int __init omap_mux_init(const char *name, u32 flags,
|
|||
|
||||
partition->name = name;
|
||||
partition->flags = flags;
|
||||
partition->gpio = flags & OMAP_MUX_MODE7;
|
||||
partition->size = mux_size;
|
||||
partition->phys = mux_pbase;
|
||||
partition->base = ioremap(mux_pbase, mux_size);
|
||||
|
|
|
@ -58,7 +58,8 @@
|
|||
#define OMAP_PIN_OFF_INPUT_PULLDOWN (OMAP_OFF_EN | OMAP_OFF_PULL_EN)
|
||||
#define OMAP_PIN_OFF_WAKEUPENABLE OMAP_WAKEUP_EN
|
||||
|
||||
#define OMAP_MODE_GPIO(x) (((x) & OMAP_MUX_MODE7) == OMAP_MUX_MODE4)
|
||||
#define OMAP_MODE_GPIO(partition, x) (((x) & OMAP_MUX_MODE7) == \
|
||||
partition->gpio)
|
||||
#define OMAP_MODE_UART(x) (((x) & OMAP_MUX_MODE7) == OMAP_MUX_MODE0)
|
||||
|
||||
/* Flags for omapX_mux_init */
|
||||
|
@ -79,13 +80,20 @@
|
|||
/*
|
||||
* omap_mux_init flags definition:
|
||||
*
|
||||
* OMAP_GPIO_MUX_MODE, bits 0-2: gpio muxing mode, same like pad control
|
||||
* register which includes values from 0-7.
|
||||
* OMAP_MUX_REG_8BIT: Ensure that access to padconf is done in 8 bits.
|
||||
* The default value is 16 bits.
|
||||
* OMAP_MUX_GPIO_IN_MODE3: The GPIO is selected in mode3.
|
||||
* The default is mode4.
|
||||
*/
|
||||
#define OMAP_MUX_REG_8BIT (1 << 0)
|
||||
#define OMAP_MUX_GPIO_IN_MODE3 (1 << 1)
|
||||
#define OMAP_MUX_GPIO_IN_MODE0 OMAP_MUX_MODE0
|
||||
#define OMAP_MUX_GPIO_IN_MODE1 OMAP_MUX_MODE1
|
||||
#define OMAP_MUX_GPIO_IN_MODE2 OMAP_MUX_MODE2
|
||||
#define OMAP_MUX_GPIO_IN_MODE3 OMAP_MUX_MODE3
|
||||
#define OMAP_MUX_GPIO_IN_MODE4 OMAP_MUX_MODE4
|
||||
#define OMAP_MUX_GPIO_IN_MODE5 OMAP_MUX_MODE5
|
||||
#define OMAP_MUX_GPIO_IN_MODE6 OMAP_MUX_MODE6
|
||||
#define OMAP_MUX_GPIO_IN_MODE7 OMAP_MUX_MODE7
|
||||
#define OMAP_MUX_REG_8BIT (1 << 3)
|
||||
|
||||
/**
|
||||
* struct omap_board_data - board specific device data
|
||||
|
@ -105,6 +113,7 @@ struct omap_board_data {
|
|||
* struct mux_partition - contain partition related information
|
||||
* @name: name of the current partition
|
||||
* @flags: flags specific to this partition
|
||||
* @gpio: gpio mux mode
|
||||
* @phys: physical address
|
||||
* @size: partition size
|
||||
* @base: virtual address after ioremap
|
||||
|
@ -114,6 +123,7 @@ struct omap_board_data {
|
|||
struct omap_mux_partition {
|
||||
const char *name;
|
||||
u32 flags;
|
||||
u32 gpio;
|
||||
u32 phys;
|
||||
u32 size;
|
||||
void __iomem *base;
|
||||
|
|
|
@ -2053,7 +2053,7 @@ int __init omap3_mux_init(struct omap_board_mux *board_subset, int flags)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
return omap_mux_init("core", 0,
|
||||
return omap_mux_init("core", OMAP_MUX_GPIO_IN_MODE4,
|
||||
OMAP3_CONTROL_PADCONF_MUX_PBASE,
|
||||
OMAP3_CONTROL_PADCONF_MUX_SIZE,
|
||||
omap3_muxmodes, package_subset, board_subset,
|
||||
|
|
|
@ -27,8 +27,7 @@
|
|||
#include <linux/pm_runtime.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/omap-dma.h>
|
||||
|
||||
#include <plat/omap-serial.h>
|
||||
#include <linux/platform_data/serial-omap.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "omap_hwmod.h"
|
||||
|
|
|
@ -190,7 +190,7 @@ static struct device_node * __init omap_get_timer_dt(struct of_device_id *match,
|
|||
* kernel registering these devices remove them dynamically from the device
|
||||
* tree on boot.
|
||||
*/
|
||||
void __init omap_dmtimer_init(void)
|
||||
static void __init omap_dmtimer_init(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
||||
|
@ -210,7 +210,7 @@ void __init omap_dmtimer_init(void)
|
|||
*
|
||||
* Get the timer errata flags that are specific to the OMAP device being used.
|
||||
*/
|
||||
u32 __init omap_dm_timer_get_errata(void)
|
||||
static u32 __init omap_dm_timer_get_errata(void)
|
||||
{
|
||||
if (cpu_is_omap24xx())
|
||||
return 0;
|
||||
|
@ -392,7 +392,7 @@ static struct of_device_id omap_counter_match[] __initdata = {
|
|||
};
|
||||
|
||||
/* Setup free-running counter for clocksource */
|
||||
static int __init omap2_sync32k_clocksource_init(void)
|
||||
static int __init __maybe_unused omap2_sync32k_clocksource_init(void)
|
||||
{
|
||||
int ret;
|
||||
struct device_node *np = NULL;
|
||||
|
|
|
@ -508,6 +508,10 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
|
|||
if (cpu_is_omap34xx()) {
|
||||
setup_ehci_io_mux(pdata->port_mode);
|
||||
setup_ohci_io_mux(pdata->port_mode);
|
||||
|
||||
if (omap_rev() <= OMAP3430_REV_ES2_1)
|
||||
usbhs_data.single_ulpi_bypass = true;
|
||||
|
||||
} else if (cpu_is_omap44xx()) {
|
||||
setup_4430ehci_io_mux(pdata->port_mode);
|
||||
setup_4430ohci_io_mux(pdata->port_mode);
|
||||
|
|
|
@ -104,7 +104,7 @@ static __initdata struct tegra_clk_init_table tegra20_clk_init_table[] = {
|
|||
static __initdata struct tegra_clk_init_table tegra30_clk_init_table[] = {
|
||||
/* name parent rate enabled */
|
||||
{ "clk_m", NULL, 0, true },
|
||||
{ "pll_p", "clk_m", 408000000, true },
|
||||
{ "pll_p", "pll_ref", 408000000, true },
|
||||
{ "pll_p_out1", "pll_p", 9600000, true },
|
||||
{ "pll_p_out4", "pll_p", 102000000, true },
|
||||
{ "sclk", "pll_p_out4", 102000000, true },
|
||||
|
|
|
@ -2045,9 +2045,7 @@ struct clk_ops tegra30_periph_clk_ops = {
|
|||
static int tegra30_dsib_clk_set_parent(struct clk_hw *hw, u8 index)
|
||||
{
|
||||
struct clk *d = clk_get_sys(NULL, "pll_d");
|
||||
/* The DSIB parent selection bit is in PLLD base
|
||||
register - can not do direct r-m-w, must be
|
||||
protected by PLLD lock */
|
||||
/* The DSIB parent selection bit is in PLLD base register */
|
||||
tegra_clk_cfg_ex(
|
||||
d, TEGRA_CLK_PLLD_MIPI_MUX_SEL, index);
|
||||
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/fsmc.h>
|
||||
#include <linux/pinctrl/machine.h>
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
#include <linux/pinctrl/pinconf-generic.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/platform_data/clk-u300.h>
|
||||
|
@ -1553,39 +1552,6 @@ static struct pinctrl_map __initdata u300_pinmux_map[] = {
|
|||
pin_highz_conf),
|
||||
};
|
||||
|
||||
struct u300_mux_hog {
|
||||
struct device *dev;
|
||||
struct pinctrl *p;
|
||||
};
|
||||
|
||||
static struct u300_mux_hog u300_mux_hogs[] = {
|
||||
{
|
||||
.dev = &uart0_device.dev,
|
||||
},
|
||||
{
|
||||
.dev = &mmcsd_device.dev,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init u300_pinctrl_fetch(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(u300_mux_hogs); i++) {
|
||||
struct pinctrl *p;
|
||||
|
||||
p = pinctrl_get_select_default(u300_mux_hogs[i].dev);
|
||||
if (IS_ERR(p)) {
|
||||
pr_err("u300: could not get pinmux hog for dev %s\n",
|
||||
dev_name(u300_mux_hogs[i].dev));
|
||||
continue;
|
||||
}
|
||||
u300_mux_hogs[i].p = p;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
subsys_initcall(u300_pinctrl_fetch);
|
||||
|
||||
/*
|
||||
* Notice that AMBA devices are initialized before platform devices.
|
||||
*
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#ifndef __DEVICES_DB8500_H
|
||||
#define __DEVICES_DB8500_H
|
||||
|
||||
#include <linux/platform_data/usb-musb-ux500.h>
|
||||
#include <mach/irqs.h>
|
||||
#include "devices-common.h"
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@ obj- :=
|
|||
# omap_device support (OMAP2+ only at the moment)
|
||||
|
||||
obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o
|
||||
obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o
|
||||
obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o
|
||||
i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o
|
||||
obj-y += $(i2c-omap-m) $(i2c-omap-y)
|
||||
|
|
|
@ -1,92 +0,0 @@
|
|||
/*
|
||||
* linux/arch/arm/plat-omap/debug-devices.c
|
||||
*
|
||||
* Copyright (C) 2005 Nokia Corporation
|
||||
* Modified from mach-omap2/board-h4.c
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/smc91x.h>
|
||||
|
||||
#include <plat/debug-devices.h>
|
||||
|
||||
/* Many OMAP development platforms reuse the same "debug board"; these
|
||||
* platforms include H2, H3, H4, and Perseus2.
|
||||
*/
|
||||
|
||||
static struct smc91x_platdata smc91x_info = {
|
||||
.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
|
||||
.leda = RPC_LED_100_10,
|
||||
.ledb = RPC_LED_TX_RX,
|
||||
};
|
||||
|
||||
static struct resource smc91x_resources[] = {
|
||||
[0] = {
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWEDGE,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device smc91x_device = {
|
||||
.name = "smc91x",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &smc91x_info,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(smc91x_resources),
|
||||
.resource = smc91x_resources,
|
||||
};
|
||||
|
||||
static struct resource led_resources[] = {
|
||||
[0] = {
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device led_device = {
|
||||
.name = "omap_dbg_led",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(led_resources),
|
||||
.resource = led_resources,
|
||||
};
|
||||
|
||||
static struct platform_device *debug_devices[] __initdata = {
|
||||
&smc91x_device,
|
||||
&led_device,
|
||||
/* ps2 kbd + mouse ports */
|
||||
/* 4 extra uarts */
|
||||
/* 6 input dip switches */
|
||||
/* 8 output pins */
|
||||
};
|
||||
|
||||
int __init debug_card_init(u32 addr, unsigned gpio)
|
||||
{
|
||||
int status;
|
||||
|
||||
smc91x_resources[0].start = addr + 0x300;
|
||||
smc91x_resources[0].end = addr + 0x30f;
|
||||
|
||||
smc91x_resources[1].start = gpio_to_irq(gpio);
|
||||
smc91x_resources[1].end = gpio_to_irq(gpio);
|
||||
|
||||
status = gpio_request(gpio, "SMC91x irq");
|
||||
if (status < 0) {
|
||||
printk(KERN_ERR "GPIO%d unavailable for smc91x IRQ\n", gpio);
|
||||
return status;
|
||||
}
|
||||
gpio_direction_input(gpio);
|
||||
|
||||
led_resources[0].start = addr;
|
||||
led_resources[0].end = addr + SZ_4K - 1;
|
||||
|
||||
return platform_add_devices(debug_devices, ARRAY_SIZE(debug_devices));
|
||||
}
|
|
@ -1,2 +0,0 @@
|
|||
/* for TI reference platforms sharing the same debug card */
|
||||
extern int debug_card_init(u32 addr, unsigned gpio);
|
|
@ -1,4 +1 @@
|
|||
header-y += user.h
|
||||
header-y += svinto.h
|
||||
header-y += sv_addr_ag.h
|
||||
header-y += sv_addr.agh
|
||||
# CRISv10 arch
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
header-y += user.h
|
||||
header-y += cryptocop.h
|
||||
# CRISv32 arch
|
||||
|
|
|
@ -2,124 +2,12 @@
|
|||
* The device /dev/cryptocop is accessible using this driver using
|
||||
* CRYPTOCOP_MAJOR (254) and minor number 0.
|
||||
*/
|
||||
|
||||
#ifndef CRYPTOCOP_H
|
||||
#define CRYPTOCOP_H
|
||||
|
||||
#include <linux/uio.h>
|
||||
#include <uapi/arch-v32/arch/cryptocop.h>
|
||||
|
||||
|
||||
#define CRYPTOCOP_SESSION_ID_NONE (0)
|
||||
|
||||
typedef unsigned long long int cryptocop_session_id;
|
||||
|
||||
/* cryptocop ioctls */
|
||||
#define ETRAXCRYPTOCOP_IOCTYPE (250)
|
||||
|
||||
#define CRYPTOCOP_IO_CREATE_SESSION _IOWR(ETRAXCRYPTOCOP_IOCTYPE, 1, struct strcop_session_op)
|
||||
#define CRYPTOCOP_IO_CLOSE_SESSION _IOW(ETRAXCRYPTOCOP_IOCTYPE, 2, struct strcop_session_op)
|
||||
#define CRYPTOCOP_IO_PROCESS_OP _IOWR(ETRAXCRYPTOCOP_IOCTYPE, 3, struct strcop_crypto_op)
|
||||
#define CRYPTOCOP_IO_MAXNR (3)
|
||||
|
||||
typedef enum {
|
||||
cryptocop_cipher_des = 0,
|
||||
cryptocop_cipher_3des = 1,
|
||||
cryptocop_cipher_aes = 2,
|
||||
cryptocop_cipher_m2m = 3, /* mem2mem is essentially a NULL cipher with blocklength=1 */
|
||||
cryptocop_cipher_none
|
||||
} cryptocop_cipher_type;
|
||||
|
||||
typedef enum {
|
||||
cryptocop_digest_sha1 = 0,
|
||||
cryptocop_digest_md5 = 1,
|
||||
cryptocop_digest_none
|
||||
} cryptocop_digest_type;
|
||||
|
||||
typedef enum {
|
||||
cryptocop_csum_le = 0,
|
||||
cryptocop_csum_be = 1,
|
||||
cryptocop_csum_none
|
||||
} cryptocop_csum_type;
|
||||
|
||||
typedef enum {
|
||||
cryptocop_cipher_mode_ecb = 0,
|
||||
cryptocop_cipher_mode_cbc,
|
||||
cryptocop_cipher_mode_none
|
||||
} cryptocop_cipher_mode;
|
||||
|
||||
typedef enum {
|
||||
cryptocop_3des_eee = 0,
|
||||
cryptocop_3des_eed = 1,
|
||||
cryptocop_3des_ede = 2,
|
||||
cryptocop_3des_edd = 3,
|
||||
cryptocop_3des_dee = 4,
|
||||
cryptocop_3des_ded = 5,
|
||||
cryptocop_3des_dde = 6,
|
||||
cryptocop_3des_ddd = 7
|
||||
} cryptocop_3des_mode;
|
||||
|
||||
/* Usermode accessible (ioctl) operations. */
|
||||
struct strcop_session_op{
|
||||
cryptocop_session_id ses_id;
|
||||
|
||||
cryptocop_cipher_type cipher; /* AES, DES, 3DES, m2m, none */
|
||||
|
||||
cryptocop_cipher_mode cmode; /* ECB, CBC, none */
|
||||
cryptocop_3des_mode des3_mode;
|
||||
|
||||
cryptocop_digest_type digest; /* MD5, SHA1, none */
|
||||
|
||||
cryptocop_csum_type csum; /* BE, LE, none */
|
||||
|
||||
unsigned char *key;
|
||||
size_t keylen;
|
||||
};
|
||||
|
||||
#define CRYPTOCOP_CSUM_LENGTH (2)
|
||||
#define CRYPTOCOP_MAX_DIGEST_LENGTH (20) /* SHA-1 20, MD5 16 */
|
||||
#define CRYPTOCOP_MAX_IV_LENGTH (16) /* (3)DES==8, AES == 16 */
|
||||
#define CRYPTOCOP_MAX_KEY_LENGTH (32)
|
||||
|
||||
struct strcop_crypto_op{
|
||||
cryptocop_session_id ses_id;
|
||||
|
||||
/* Indata. */
|
||||
unsigned char *indata;
|
||||
size_t inlen; /* Total indata length. */
|
||||
|
||||
/* Cipher configuration. */
|
||||
unsigned char do_cipher:1;
|
||||
unsigned char decrypt:1; /* 1 == decrypt, 0 == encrypt */
|
||||
unsigned char cipher_explicit:1;
|
||||
size_t cipher_start;
|
||||
size_t cipher_len;
|
||||
/* cipher_iv is used if do_cipher and cipher_explicit and the cipher
|
||||
mode is CBC. The length is controlled by the type of cipher,
|
||||
e.g. DES/3DES 8 octets and AES 16 octets. */
|
||||
unsigned char cipher_iv[CRYPTOCOP_MAX_IV_LENGTH];
|
||||
/* Outdata. */
|
||||
unsigned char *cipher_outdata;
|
||||
size_t cipher_outlen;
|
||||
|
||||
/* digest configuration. */
|
||||
unsigned char do_digest:1;
|
||||
size_t digest_start;
|
||||
size_t digest_len;
|
||||
/* Outdata. The actual length is determined by the type of the digest. */
|
||||
unsigned char digest[CRYPTOCOP_MAX_DIGEST_LENGTH];
|
||||
|
||||
/* Checksum configuration. */
|
||||
unsigned char do_csum:1;
|
||||
size_t csum_start;
|
||||
size_t csum_len;
|
||||
/* Outdata. */
|
||||
unsigned char csum[CRYPTOCOP_CSUM_LENGTH];
|
||||
};
|
||||
|
||||
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/********** The API to use from inside the kernel. ************/
|
||||
|
||||
#include <arch/hwregs/dma.h>
|
||||
|
@ -267,6 +155,4 @@ int cryptocop_job_queue_insert_crypto(struct cryptocop_operation *operation);
|
|||
|
||||
int cryptocop_job_queue_insert_user_job(struct cryptocop_operation *operation);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* CRYPTOCOP_H */
|
||||
|
|
|
@ -118,7 +118,7 @@ static inline int arch_write_trylock(arch_rwlock_t *rw)
|
|||
ret = 1;
|
||||
}
|
||||
arch_spin_unlock(&rw->slock);
|
||||
return 1;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define _raw_read_lock_flags(lock, flags) _raw_read_lock(lock)
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
header-y += arch-v10/
|
||||
header-y += arch-v32/
|
||||
|
||||
header-y += ethernet.h
|
||||
header-y += etraxgpio.h
|
||||
header-y += rs485.h
|
||||
header-y += sync_serial.h
|
||||
|
||||
generic-y += clkdev.h
|
||||
generic-y += exec.h
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
#ifndef _CRIS_PTRACE_H
|
||||
#define _CRIS_PTRACE_H
|
||||
|
||||
#include <arch/ptrace.h>
|
||||
#include <uapi/asm/ptrace.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
|
||||
#define PTRACE_GETREGS 12
|
||||
|
@ -11,6 +10,4 @@
|
|||
|
||||
#define profile_pc(regs) instruction_pointer(regs)
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _CRIS_PTRACE_H */
|
||||
|
|
|
@ -1,12 +1,8 @@
|
|||
#ifndef _ASM_CRIS_SIGNAL_H
|
||||
#define _ASM_CRIS_SIGNAL_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <uapi/asm/signal.h>
|
||||
|
||||
/* Avoid too many header ordering problems. */
|
||||
struct siginfo;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
/* Most things should be clean enough to redefine this at will, if care
|
||||
is taken to make libc match. */
|
||||
|
||||
|
@ -20,95 +16,6 @@ typedef struct {
|
|||
unsigned long sig[_NSIG_WORDS];
|
||||
} sigset_t;
|
||||
|
||||
#else
|
||||
/* Here we must cater to libcs that poke about in kernel headers. */
|
||||
|
||||
#define NSIG 32
|
||||
typedef unsigned long sigset_t;
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#define SIGHUP 1
|
||||
#define SIGINT 2
|
||||
#define SIGQUIT 3
|
||||
#define SIGILL 4
|
||||
#define SIGTRAP 5
|
||||
#define SIGABRT 6
|
||||
#define SIGIOT 6
|
||||
#define SIGBUS 7
|
||||
#define SIGFPE 8
|
||||
#define SIGKILL 9
|
||||
#define SIGUSR1 10
|
||||
#define SIGSEGV 11
|
||||
#define SIGUSR2 12
|
||||
#define SIGPIPE 13
|
||||
#define SIGALRM 14
|
||||
#define SIGTERM 15
|
||||
#define SIGSTKFLT 16
|
||||
#define SIGCHLD 17
|
||||
#define SIGCONT 18
|
||||
#define SIGSTOP 19
|
||||
#define SIGTSTP 20
|
||||
#define SIGTTIN 21
|
||||
#define SIGTTOU 22
|
||||
#define SIGURG 23
|
||||
#define SIGXCPU 24
|
||||
#define SIGXFSZ 25
|
||||
#define SIGVTALRM 26
|
||||
#define SIGPROF 27
|
||||
#define SIGWINCH 28
|
||||
#define SIGIO 29
|
||||
#define SIGPOLL SIGIO
|
||||
/*
|
||||
#define SIGLOST 29
|
||||
*/
|
||||
#define SIGPWR 30
|
||||
#define SIGSYS 31
|
||||
#define SIGUNUSED 31
|
||||
|
||||
/* These should not be considered constants from userland. */
|
||||
#define SIGRTMIN 32
|
||||
#define SIGRTMAX _NSIG
|
||||
|
||||
/*
|
||||
* SA_FLAGS values:
|
||||
*
|
||||
* SA_ONSTACK indicates that a registered stack_t will be used.
|
||||
* SA_RESTART flag to get restarting signals (which were the default long ago)
|
||||
* SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
|
||||
* SA_RESETHAND clears the handler when the signal is delivered.
|
||||
* SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
|
||||
* SA_NODEFER prevents the current signal from being masked in the handler.
|
||||
*
|
||||
* SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
|
||||
* Unix names RESETHAND and NODEFER respectively.
|
||||
*/
|
||||
|
||||
#define SA_NOCLDSTOP 0x00000001u
|
||||
#define SA_NOCLDWAIT 0x00000002u
|
||||
#define SA_SIGINFO 0x00000004u
|
||||
#define SA_ONSTACK 0x08000000u
|
||||
#define SA_RESTART 0x10000000u
|
||||
#define SA_NODEFER 0x40000000u
|
||||
#define SA_RESETHAND 0x80000000u
|
||||
|
||||
#define SA_NOMASK SA_NODEFER
|
||||
#define SA_ONESHOT SA_RESETHAND
|
||||
|
||||
#define SA_RESTORER 0x04000000
|
||||
|
||||
/*
|
||||
* sigaltstack controls
|
||||
*/
|
||||
#define SS_ONSTACK 1
|
||||
#define SS_DISABLE 2
|
||||
|
||||
#define MINSIGSTKSZ 2048
|
||||
#define SIGSTKSZ 8192
|
||||
|
||||
#include <asm-generic/signal-defs.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct old_sigaction {
|
||||
__sighandler_t sa_handler;
|
||||
old_sigset_t sa_mask;
|
||||
|
@ -126,32 +33,6 @@ struct sigaction {
|
|||
struct k_sigaction {
|
||||
struct sigaction sa;
|
||||
};
|
||||
#else
|
||||
/* Here we must cater to libcs that poke about in kernel headers. */
|
||||
|
||||
struct sigaction {
|
||||
union {
|
||||
__sighandler_t _sa_handler;
|
||||
void (*_sa_sigaction)(int, struct siginfo *, void *);
|
||||
} _u;
|
||||
sigset_t sa_mask;
|
||||
unsigned long sa_flags;
|
||||
void (*sa_restorer)(void);
|
||||
};
|
||||
|
||||
#define sa_handler _u._sa_handler
|
||||
#define sa_sigaction _u._sa_sigaction
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
typedef struct sigaltstack {
|
||||
void *ss_sp;
|
||||
int ss_flags;
|
||||
size_t ss_size;
|
||||
} stack_t;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <asm/sigcontext.h>
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
#ifndef _CRIS_SWAB_H
|
||||
#define _CRIS_SWAB_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <arch/swab.h>
|
||||
#endif /* __KERNEL__ */
|
||||
#include <uapi/asm/swab.h>
|
||||
|
||||
#endif /* _CRIS_SWAB_H */
|
||||
|
|
|
@ -1,47 +1,8 @@
|
|||
#ifndef _CRIS_TERMIOS_H
|
||||
#define _CRIS_TERMIOS_H
|
||||
|
||||
#include <asm/termbits.h>
|
||||
#include <asm/ioctls.h>
|
||||
#include <asm/rs485.h>
|
||||
#include <linux/serial.h>
|
||||
#include <uapi/asm/termios.h>
|
||||
|
||||
struct winsize {
|
||||
unsigned short ws_row;
|
||||
unsigned short ws_col;
|
||||
unsigned short ws_xpixel;
|
||||
unsigned short ws_ypixel;
|
||||
};
|
||||
|
||||
#define NCC 8
|
||||
struct termio {
|
||||
unsigned short c_iflag; /* input mode flags */
|
||||
unsigned short c_oflag; /* output mode flags */
|
||||
unsigned short c_cflag; /* control mode flags */
|
||||
unsigned short c_lflag; /* local mode flags */
|
||||
unsigned char c_line; /* line discipline */
|
||||
unsigned char c_cc[NCC]; /* control characters */
|
||||
};
|
||||
|
||||
/* modem lines */
|
||||
#define TIOCM_LE 0x001
|
||||
#define TIOCM_DTR 0x002
|
||||
#define TIOCM_RTS 0x004
|
||||
#define TIOCM_ST 0x008
|
||||
#define TIOCM_SR 0x010
|
||||
#define TIOCM_CTS 0x020
|
||||
#define TIOCM_CAR 0x040
|
||||
#define TIOCM_RNG 0x080
|
||||
#define TIOCM_DSR 0x100
|
||||
#define TIOCM_CD TIOCM_CAR
|
||||
#define TIOCM_RI TIOCM_RNG
|
||||
#define TIOCM_OUT1 0x2000
|
||||
#define TIOCM_OUT2 0x4000
|
||||
#define TIOCM_LOOP 0x8000
|
||||
|
||||
/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/* intr=^C quit=^\ erase=del kill=^U
|
||||
eof=^D vtime=\0 vmin=\1 sxtc=\0
|
||||
|
@ -87,6 +48,4 @@ struct termio {
|
|||
#define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios))
|
||||
#define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios))
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _CRIS_TERMIOS_H */
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
#ifndef _ETRAX_TYPES_H
|
||||
#define _ETRAX_TYPES_H
|
||||
|
||||
#include <asm-generic/int-ll64.h>
|
||||
#include <uapi/asm/types.h>
|
||||
|
||||
/*
|
||||
* These aren't exported outside the kernel to avoid name space clashes
|
||||
*/
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define BITS_PER_LONG 32
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,347 +1,8 @@
|
|||
#ifndef _ASM_CRIS_UNISTD_H_
|
||||
#define _ASM_CRIS_UNISTD_H_
|
||||
|
||||
/*
|
||||
* This file contains the system call numbers, and stub macros for libc.
|
||||
*/
|
||||
#include <uapi/asm/unistd.h>
|
||||
|
||||
#define __NR_restart_syscall 0
|
||||
#define __NR_exit 1
|
||||
#define __NR_fork 2
|
||||
#define __NR_read 3
|
||||
#define __NR_write 4
|
||||
#define __NR_open 5
|
||||
#define __NR_close 6
|
||||
#define __NR_waitpid 7
|
||||
#define __NR_creat 8
|
||||
#define __NR_link 9
|
||||
#define __NR_unlink 10
|
||||
#define __NR_execve 11
|
||||
#define __NR_chdir 12
|
||||
#define __NR_time 13
|
||||
#define __NR_mknod 14
|
||||
#define __NR_chmod 15
|
||||
#define __NR_lchown 16
|
||||
#define __NR_break 17
|
||||
#define __NR_oldstat 18
|
||||
#define __NR_lseek 19
|
||||
#define __NR_getpid 20
|
||||
#define __NR_mount 21
|
||||
#define __NR_umount 22
|
||||
#define __NR_setuid 23
|
||||
#define __NR_getuid 24
|
||||
#define __NR_stime 25
|
||||
#define __NR_ptrace 26
|
||||
#define __NR_alarm 27
|
||||
#define __NR_oldfstat 28
|
||||
#define __NR_pause 29
|
||||
#define __NR_utime 30
|
||||
#define __NR_stty 31
|
||||
#define __NR_gtty 32
|
||||
#define __NR_access 33
|
||||
#define __NR_nice 34
|
||||
#define __NR_ftime 35
|
||||
#define __NR_sync 36
|
||||
#define __NR_kill 37
|
||||
#define __NR_rename 38
|
||||
#define __NR_mkdir 39
|
||||
#define __NR_rmdir 40
|
||||
#define __NR_dup 41
|
||||
#define __NR_pipe 42
|
||||
#define __NR_times 43
|
||||
#define __NR_prof 44
|
||||
#define __NR_brk 45
|
||||
#define __NR_setgid 46
|
||||
#define __NR_getgid 47
|
||||
#define __NR_signal 48
|
||||
#define __NR_geteuid 49
|
||||
#define __NR_getegid 50
|
||||
#define __NR_acct 51
|
||||
#define __NR_umount2 52
|
||||
#define __NR_lock 53
|
||||
#define __NR_ioctl 54
|
||||
#define __NR_fcntl 55
|
||||
#define __NR_mpx 56
|
||||
#define __NR_setpgid 57
|
||||
#define __NR_ulimit 58
|
||||
#define __NR_oldolduname 59
|
||||
#define __NR_umask 60
|
||||
#define __NR_chroot 61
|
||||
#define __NR_ustat 62
|
||||
#define __NR_dup2 63
|
||||
#define __NR_getppid 64
|
||||
#define __NR_getpgrp 65
|
||||
#define __NR_setsid 66
|
||||
#define __NR_sigaction 67
|
||||
#define __NR_sgetmask 68
|
||||
#define __NR_ssetmask 69
|
||||
#define __NR_setreuid 70
|
||||
#define __NR_setregid 71
|
||||
#define __NR_sigsuspend 72
|
||||
#define __NR_sigpending 73
|
||||
#define __NR_sethostname 74
|
||||
#define __NR_setrlimit 75
|
||||
#define __NR_getrlimit 76
|
||||
#define __NR_getrusage 77
|
||||
#define __NR_gettimeofday 78
|
||||
#define __NR_settimeofday 79
|
||||
#define __NR_getgroups 80
|
||||
#define __NR_setgroups 81
|
||||
#define __NR_select 82
|
||||
#define __NR_symlink 83
|
||||
#define __NR_oldlstat 84
|
||||
#define __NR_readlink 85
|
||||
#define __NR_uselib 86
|
||||
#define __NR_swapon 87
|
||||
#define __NR_reboot 88
|
||||
#define __NR_readdir 89
|
||||
#define __NR_mmap 90
|
||||
#define __NR_munmap 91
|
||||
#define __NR_truncate 92
|
||||
#define __NR_ftruncate 93
|
||||
#define __NR_fchmod 94
|
||||
#define __NR_fchown 95
|
||||
#define __NR_getpriority 96
|
||||
#define __NR_setpriority 97
|
||||
#define __NR_profil 98
|
||||
#define __NR_statfs 99
|
||||
#define __NR_fstatfs 100
|
||||
#define __NR_ioperm 101
|
||||
#define __NR_socketcall 102
|
||||
#define __NR_syslog 103
|
||||
#define __NR_setitimer 104
|
||||
#define __NR_getitimer 105
|
||||
#define __NR_stat 106
|
||||
#define __NR_lstat 107
|
||||
#define __NR_fstat 108
|
||||
#define __NR_olduname 109
|
||||
#define __NR_iopl 110
|
||||
#define __NR_vhangup 111
|
||||
#define __NR_idle 112
|
||||
#define __NR_vm86 113
|
||||
#define __NR_wait4 114
|
||||
#define __NR_swapoff 115
|
||||
#define __NR_sysinfo 116
|
||||
#define __NR_ipc 117
|
||||
#define __NR_fsync 118
|
||||
#define __NR_sigreturn 119
|
||||
#define __NR_clone 120
|
||||
#define __NR_setdomainname 121
|
||||
#define __NR_uname 122
|
||||
#define __NR_modify_ldt 123
|
||||
#define __NR_adjtimex 124
|
||||
#define __NR_mprotect 125
|
||||
#define __NR_sigprocmask 126
|
||||
#define __NR_create_module 127
|
||||
#define __NR_init_module 128
|
||||
#define __NR_delete_module 129
|
||||
#define __NR_get_kernel_syms 130
|
||||
#define __NR_quotactl 131
|
||||
#define __NR_getpgid 132
|
||||
#define __NR_fchdir 133
|
||||
#define __NR_bdflush 134
|
||||
#define __NR_sysfs 135
|
||||
#define __NR_personality 136
|
||||
#define __NR_afs_syscall 137 /* Syscall for Andrew File System */
|
||||
#define __NR_setfsuid 138
|
||||
#define __NR_setfsgid 139
|
||||
#define __NR__llseek 140
|
||||
#define __NR_getdents 141
|
||||
#define __NR__newselect 142
|
||||
#define __NR_flock 143
|
||||
#define __NR_msync 144
|
||||
#define __NR_readv 145
|
||||
#define __NR_writev 146
|
||||
#define __NR_getsid 147
|
||||
#define __NR_fdatasync 148
|
||||
#define __NR__sysctl 149
|
||||
#define __NR_mlock 150
|
||||
#define __NR_munlock 151
|
||||
#define __NR_mlockall 152
|
||||
#define __NR_munlockall 153
|
||||
#define __NR_sched_setparam 154
|
||||
#define __NR_sched_getparam 155
|
||||
#define __NR_sched_setscheduler 156
|
||||
#define __NR_sched_getscheduler 157
|
||||
#define __NR_sched_yield 158
|
||||
#define __NR_sched_get_priority_max 159
|
||||
#define __NR_sched_get_priority_min 160
|
||||
#define __NR_sched_rr_get_interval 161
|
||||
#define __NR_nanosleep 162
|
||||
#define __NR_mremap 163
|
||||
#define __NR_setresuid 164
|
||||
#define __NR_getresuid 165
|
||||
|
||||
#define __NR_query_module 167
|
||||
#define __NR_poll 168
|
||||
#define __NR_nfsservctl 169
|
||||
#define __NR_setresgid 170
|
||||
#define __NR_getresgid 171
|
||||
#define __NR_prctl 172
|
||||
#define __NR_rt_sigreturn 173
|
||||
#define __NR_rt_sigaction 174
|
||||
#define __NR_rt_sigprocmask 175
|
||||
#define __NR_rt_sigpending 176
|
||||
#define __NR_rt_sigtimedwait 177
|
||||
#define __NR_rt_sigqueueinfo 178
|
||||
#define __NR_rt_sigsuspend 179
|
||||
#define __NR_pread64 180
|
||||
#define __NR_pwrite64 181
|
||||
#define __NR_chown 182
|
||||
#define __NR_getcwd 183
|
||||
#define __NR_capget 184
|
||||
#define __NR_capset 185
|
||||
#define __NR_sigaltstack 186
|
||||
#define __NR_sendfile 187
|
||||
#define __NR_getpmsg 188 /* some people actually want streams */
|
||||
#define __NR_putpmsg 189 /* some people actually want streams */
|
||||
#define __NR_vfork 190
|
||||
#define __NR_ugetrlimit 191 /* SuS compliant getrlimit */
|
||||
#define __NR_mmap2 192
|
||||
#define __NR_truncate64 193
|
||||
#define __NR_ftruncate64 194
|
||||
#define __NR_stat64 195
|
||||
#define __NR_lstat64 196
|
||||
#define __NR_fstat64 197
|
||||
#define __NR_lchown32 198
|
||||
#define __NR_getuid32 199
|
||||
#define __NR_getgid32 200
|
||||
#define __NR_geteuid32 201
|
||||
#define __NR_getegid32 202
|
||||
#define __NR_setreuid32 203
|
||||
#define __NR_setregid32 204
|
||||
#define __NR_getgroups32 205
|
||||
#define __NR_setgroups32 206
|
||||
#define __NR_fchown32 207
|
||||
#define __NR_setresuid32 208
|
||||
#define __NR_getresuid32 209
|
||||
#define __NR_setresgid32 210
|
||||
#define __NR_getresgid32 211
|
||||
#define __NR_chown32 212
|
||||
#define __NR_setuid32 213
|
||||
#define __NR_setgid32 214
|
||||
#define __NR_setfsuid32 215
|
||||
#define __NR_setfsgid32 216
|
||||
#define __NR_pivot_root 217
|
||||
#define __NR_mincore 218
|
||||
#define __NR_madvise 219
|
||||
#define __NR_getdents64 220
|
||||
#define __NR_fcntl64 221
|
||||
/* 223 is unused */
|
||||
#define __NR_gettid 224
|
||||
#define __NR_readahead 225
|
||||
#define __NR_setxattr 226
|
||||
#define __NR_lsetxattr 227
|
||||
#define __NR_fsetxattr 228
|
||||
#define __NR_getxattr 229
|
||||
#define __NR_lgetxattr 230
|
||||
#define __NR_fgetxattr 231
|
||||
#define __NR_listxattr 232
|
||||
#define __NR_llistxattr 233
|
||||
#define __NR_flistxattr 234
|
||||
#define __NR_removexattr 235
|
||||
#define __NR_lremovexattr 236
|
||||
#define __NR_fremovexattr 237
|
||||
#define __NR_tkill 238
|
||||
#define __NR_sendfile64 239
|
||||
#define __NR_futex 240
|
||||
#define __NR_sched_setaffinity 241
|
||||
#define __NR_sched_getaffinity 242
|
||||
#define __NR_set_thread_area 243
|
||||
#define __NR_get_thread_area 244
|
||||
#define __NR_io_setup 245
|
||||
#define __NR_io_destroy 246
|
||||
#define __NR_io_getevents 247
|
||||
#define __NR_io_submit 248
|
||||
#define __NR_io_cancel 249
|
||||
#define __NR_fadvise64 250
|
||||
/* 251 is available for reuse (was briefly sys_set_zone_reclaim) */
|
||||
#define __NR_exit_group 252
|
||||
#define __NR_lookup_dcookie 253
|
||||
#define __NR_epoll_create 254
|
||||
#define __NR_epoll_ctl 255
|
||||
#define __NR_epoll_wait 256
|
||||
#define __NR_remap_file_pages 257
|
||||
#define __NR_set_tid_address 258
|
||||
#define __NR_timer_create 259
|
||||
#define __NR_timer_settime (__NR_timer_create+1)
|
||||
#define __NR_timer_gettime (__NR_timer_create+2)
|
||||
#define __NR_timer_getoverrun (__NR_timer_create+3)
|
||||
#define __NR_timer_delete (__NR_timer_create+4)
|
||||
#define __NR_clock_settime (__NR_timer_create+5)
|
||||
#define __NR_clock_gettime (__NR_timer_create+6)
|
||||
#define __NR_clock_getres (__NR_timer_create+7)
|
||||
#define __NR_clock_nanosleep (__NR_timer_create+8)
|
||||
#define __NR_statfs64 268
|
||||
#define __NR_fstatfs64 269
|
||||
#define __NR_tgkill 270
|
||||
#define __NR_utimes 271
|
||||
#define __NR_fadvise64_64 272
|
||||
#define __NR_vserver 273
|
||||
#define __NR_mbind 274
|
||||
#define __NR_get_mempolicy 275
|
||||
#define __NR_set_mempolicy 276
|
||||
#define __NR_mq_open 277
|
||||
#define __NR_mq_unlink (__NR_mq_open+1)
|
||||
#define __NR_mq_timedsend (__NR_mq_open+2)
|
||||
#define __NR_mq_timedreceive (__NR_mq_open+3)
|
||||
#define __NR_mq_notify (__NR_mq_open+4)
|
||||
#define __NR_mq_getsetattr (__NR_mq_open+5)
|
||||
#define __NR_kexec_load 283
|
||||
#define __NR_waitid 284
|
||||
/* #define __NR_sys_setaltroot 285 */
|
||||
#define __NR_add_key 286
|
||||
#define __NR_request_key 287
|
||||
#define __NR_keyctl 288
|
||||
#define __NR_ioprio_set 289
|
||||
#define __NR_ioprio_get 290
|
||||
#define __NR_inotify_init 291
|
||||
#define __NR_inotify_add_watch 292
|
||||
#define __NR_inotify_rm_watch 293
|
||||
#define __NR_migrate_pages 294
|
||||
#define __NR_openat 295
|
||||
#define __NR_mkdirat 296
|
||||
#define __NR_mknodat 297
|
||||
#define __NR_fchownat 298
|
||||
#define __NR_futimesat 299
|
||||
#define __NR_fstatat64 300
|
||||
#define __NR_unlinkat 301
|
||||
#define __NR_renameat 302
|
||||
#define __NR_linkat 303
|
||||
#define __NR_symlinkat 304
|
||||
#define __NR_readlinkat 305
|
||||
#define __NR_fchmodat 306
|
||||
#define __NR_faccessat 307
|
||||
#define __NR_pselect6 308
|
||||
#define __NR_ppoll 309
|
||||
#define __NR_unshare 310
|
||||
#define __NR_set_robust_list 311
|
||||
#define __NR_get_robust_list 312
|
||||
#define __NR_splice 313
|
||||
#define __NR_sync_file_range 314
|
||||
#define __NR_tee 315
|
||||
#define __NR_vmsplice 316
|
||||
#define __NR_move_pages 317
|
||||
#define __NR_getcpu 318
|
||||
#define __NR_epoll_pwait 319
|
||||
#define __NR_utimensat 320
|
||||
#define __NR_signalfd 321
|
||||
#define __NR_timerfd_create 322
|
||||
#define __NR_eventfd 323
|
||||
#define __NR_fallocate 324
|
||||
#define __NR_timerfd_settime 325
|
||||
#define __NR_timerfd_gettime 326
|
||||
#define __NR_signalfd4 327
|
||||
#define __NR_eventfd2 328
|
||||
#define __NR_epoll_create1 329
|
||||
#define __NR_dup3 330
|
||||
#define __NR_pipe2 331
|
||||
#define __NR_inotify_init1 332
|
||||
#define __NR_preadv 333
|
||||
#define __NR_pwritev 334
|
||||
#define __NR_setns 335
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define NR_syscalls 336
|
||||
|
||||
|
@ -384,5 +45,4 @@
|
|||
*/
|
||||
#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_CRIS_UNISTD_H_ */
|
||||
|
|
|
@ -1 +1,5 @@
|
|||
# UAPI Header export list
|
||||
header-y += sv_addr.agh
|
||||
header-y += sv_addr_ag.h
|
||||
header-y += svinto.h
|
||||
header-y += user.h
|
||||
|
|
|
@ -1 +1,3 @@
|
|||
# UAPI Header export list
|
||||
header-y += cryptocop.h
|
||||
header-y += user.h
|
||||
|
|
|
@ -0,0 +1,122 @@
|
|||
/*
|
||||
* The device /dev/cryptocop is accessible using this driver using
|
||||
* CRYPTOCOP_MAJOR (254) and minor number 0.
|
||||
*/
|
||||
|
||||
#ifndef _UAPICRYPTOCOP_H
|
||||
#define _UAPICRYPTOCOP_H
|
||||
|
||||
#include <linux/uio.h>
|
||||
|
||||
|
||||
#define CRYPTOCOP_SESSION_ID_NONE (0)
|
||||
|
||||
typedef unsigned long long int cryptocop_session_id;
|
||||
|
||||
/* cryptocop ioctls */
|
||||
#define ETRAXCRYPTOCOP_IOCTYPE (250)
|
||||
|
||||
#define CRYPTOCOP_IO_CREATE_SESSION _IOWR(ETRAXCRYPTOCOP_IOCTYPE, 1, struct strcop_session_op)
|
||||
#define CRYPTOCOP_IO_CLOSE_SESSION _IOW(ETRAXCRYPTOCOP_IOCTYPE, 2, struct strcop_session_op)
|
||||
#define CRYPTOCOP_IO_PROCESS_OP _IOWR(ETRAXCRYPTOCOP_IOCTYPE, 3, struct strcop_crypto_op)
|
||||
#define CRYPTOCOP_IO_MAXNR (3)
|
||||
|
||||
typedef enum {
|
||||
cryptocop_cipher_des = 0,
|
||||
cryptocop_cipher_3des = 1,
|
||||
cryptocop_cipher_aes = 2,
|
||||
cryptocop_cipher_m2m = 3, /* mem2mem is essentially a NULL cipher with blocklength=1 */
|
||||
cryptocop_cipher_none
|
||||
} cryptocop_cipher_type;
|
||||
|
||||
typedef enum {
|
||||
cryptocop_digest_sha1 = 0,
|
||||
cryptocop_digest_md5 = 1,
|
||||
cryptocop_digest_none
|
||||
} cryptocop_digest_type;
|
||||
|
||||
typedef enum {
|
||||
cryptocop_csum_le = 0,
|
||||
cryptocop_csum_be = 1,
|
||||
cryptocop_csum_none
|
||||
} cryptocop_csum_type;
|
||||
|
||||
typedef enum {
|
||||
cryptocop_cipher_mode_ecb = 0,
|
||||
cryptocop_cipher_mode_cbc,
|
||||
cryptocop_cipher_mode_none
|
||||
} cryptocop_cipher_mode;
|
||||
|
||||
typedef enum {
|
||||
cryptocop_3des_eee = 0,
|
||||
cryptocop_3des_eed = 1,
|
||||
cryptocop_3des_ede = 2,
|
||||
cryptocop_3des_edd = 3,
|
||||
cryptocop_3des_dee = 4,
|
||||
cryptocop_3des_ded = 5,
|
||||
cryptocop_3des_dde = 6,
|
||||
cryptocop_3des_ddd = 7
|
||||
} cryptocop_3des_mode;
|
||||
|
||||
/* Usermode accessible (ioctl) operations. */
|
||||
struct strcop_session_op{
|
||||
cryptocop_session_id ses_id;
|
||||
|
||||
cryptocop_cipher_type cipher; /* AES, DES, 3DES, m2m, none */
|
||||
|
||||
cryptocop_cipher_mode cmode; /* ECB, CBC, none */
|
||||
cryptocop_3des_mode des3_mode;
|
||||
|
||||
cryptocop_digest_type digest; /* MD5, SHA1, none */
|
||||
|
||||
cryptocop_csum_type csum; /* BE, LE, none */
|
||||
|
||||
unsigned char *key;
|
||||
size_t keylen;
|
||||
};
|
||||
|
||||
#define CRYPTOCOP_CSUM_LENGTH (2)
|
||||
#define CRYPTOCOP_MAX_DIGEST_LENGTH (20) /* SHA-1 20, MD5 16 */
|
||||
#define CRYPTOCOP_MAX_IV_LENGTH (16) /* (3)DES==8, AES == 16 */
|
||||
#define CRYPTOCOP_MAX_KEY_LENGTH (32)
|
||||
|
||||
struct strcop_crypto_op{
|
||||
cryptocop_session_id ses_id;
|
||||
|
||||
/* Indata. */
|
||||
unsigned char *indata;
|
||||
size_t inlen; /* Total indata length. */
|
||||
|
||||
/* Cipher configuration. */
|
||||
unsigned char do_cipher:1;
|
||||
unsigned char decrypt:1; /* 1 == decrypt, 0 == encrypt */
|
||||
unsigned char cipher_explicit:1;
|
||||
size_t cipher_start;
|
||||
size_t cipher_len;
|
||||
/* cipher_iv is used if do_cipher and cipher_explicit and the cipher
|
||||
mode is CBC. The length is controlled by the type of cipher,
|
||||
e.g. DES/3DES 8 octets and AES 16 octets. */
|
||||
unsigned char cipher_iv[CRYPTOCOP_MAX_IV_LENGTH];
|
||||
/* Outdata. */
|
||||
unsigned char *cipher_outdata;
|
||||
size_t cipher_outlen;
|
||||
|
||||
/* digest configuration. */
|
||||
unsigned char do_digest:1;
|
||||
size_t digest_start;
|
||||
size_t digest_len;
|
||||
/* Outdata. The actual length is determined by the type of the digest. */
|
||||
unsigned char digest[CRYPTOCOP_MAX_DIGEST_LENGTH];
|
||||
|
||||
/* Checksum configuration. */
|
||||
unsigned char do_csum:1;
|
||||
size_t csum_start;
|
||||
size_t csum_len;
|
||||
/* Outdata. */
|
||||
unsigned char csum[CRYPTOCOP_CSUM_LENGTH];
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /* _UAPICRYPTOCOP_H */
|
|
@ -3,3 +3,37 @@ include include/uapi/asm-generic/Kbuild.asm
|
|||
|
||||
header-y += arch-v10/
|
||||
header-y += arch-v32/
|
||||
header-y += auxvec.h
|
||||
header-y += bitsperlong.h
|
||||
header-y += byteorder.h
|
||||
header-y += errno.h
|
||||
header-y += ethernet.h
|
||||
header-y += etraxgpio.h
|
||||
header-y += fcntl.h
|
||||
header-y += ioctl.h
|
||||
header-y += ioctls.h
|
||||
header-y += ipcbuf.h
|
||||
header-y += mman.h
|
||||
header-y += msgbuf.h
|
||||
header-y += param.h
|
||||
header-y += poll.h
|
||||
header-y += posix_types.h
|
||||
header-y += ptrace.h
|
||||
header-y += resource.h
|
||||
header-y += rs485.h
|
||||
header-y += sembuf.h
|
||||
header-y += setup.h
|
||||
header-y += shmbuf.h
|
||||
header-y += sigcontext.h
|
||||
header-y += siginfo.h
|
||||
header-y += signal.h
|
||||
header-y += socket.h
|
||||
header-y += sockios.h
|
||||
header-y += stat.h
|
||||
header-y += statfs.h
|
||||
header-y += swab.h
|
||||
header-y += sync_serial.h
|
||||
header-y += termbits.h
|
||||
header-y += termios.h
|
||||
header-y += types.h
|
||||
header-y += unistd.h
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
#include <arch/ptrace.h>
|
|
@ -0,0 +1,122 @@
|
|||
#ifndef _UAPI_ASM_CRIS_SIGNAL_H
|
||||
#define _UAPI_ASM_CRIS_SIGNAL_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* Avoid too many header ordering problems. */
|
||||
struct siginfo;
|
||||
|
||||
#ifndef __KERNEL__
|
||||
/* Here we must cater to libcs that poke about in kernel headers. */
|
||||
|
||||
#define NSIG 32
|
||||
typedef unsigned long sigset_t;
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#define SIGHUP 1
|
||||
#define SIGINT 2
|
||||
#define SIGQUIT 3
|
||||
#define SIGILL 4
|
||||
#define SIGTRAP 5
|
||||
#define SIGABRT 6
|
||||
#define SIGIOT 6
|
||||
#define SIGBUS 7
|
||||
#define SIGFPE 8
|
||||
#define SIGKILL 9
|
||||
#define SIGUSR1 10
|
||||
#define SIGSEGV 11
|
||||
#define SIGUSR2 12
|
||||
#define SIGPIPE 13
|
||||
#define SIGALRM 14
|
||||
#define SIGTERM 15
|
||||
#define SIGSTKFLT 16
|
||||
#define SIGCHLD 17
|
||||
#define SIGCONT 18
|
||||
#define SIGSTOP 19
|
||||
#define SIGTSTP 20
|
||||
#define SIGTTIN 21
|
||||
#define SIGTTOU 22
|
||||
#define SIGURG 23
|
||||
#define SIGXCPU 24
|
||||
#define SIGXFSZ 25
|
||||
#define SIGVTALRM 26
|
||||
#define SIGPROF 27
|
||||
#define SIGWINCH 28
|
||||
#define SIGIO 29
|
||||
#define SIGPOLL SIGIO
|
||||
/*
|
||||
#define SIGLOST 29
|
||||
*/
|
||||
#define SIGPWR 30
|
||||
#define SIGSYS 31
|
||||
#define SIGUNUSED 31
|
||||
|
||||
/* These should not be considered constants from userland. */
|
||||
#define SIGRTMIN 32
|
||||
#define SIGRTMAX _NSIG
|
||||
|
||||
/*
|
||||
* SA_FLAGS values:
|
||||
*
|
||||
* SA_ONSTACK indicates that a registered stack_t will be used.
|
||||
* SA_RESTART flag to get restarting signals (which were the default long ago)
|
||||
* SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
|
||||
* SA_RESETHAND clears the handler when the signal is delivered.
|
||||
* SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
|
||||
* SA_NODEFER prevents the current signal from being masked in the handler.
|
||||
*
|
||||
* SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
|
||||
* Unix names RESETHAND and NODEFER respectively.
|
||||
*/
|
||||
|
||||
#define SA_NOCLDSTOP 0x00000001u
|
||||
#define SA_NOCLDWAIT 0x00000002u
|
||||
#define SA_SIGINFO 0x00000004u
|
||||
#define SA_ONSTACK 0x08000000u
|
||||
#define SA_RESTART 0x10000000u
|
||||
#define SA_NODEFER 0x40000000u
|
||||
#define SA_RESETHAND 0x80000000u
|
||||
|
||||
#define SA_NOMASK SA_NODEFER
|
||||
#define SA_ONESHOT SA_RESETHAND
|
||||
|
||||
#define SA_RESTORER 0x04000000
|
||||
|
||||
/*
|
||||
* sigaltstack controls
|
||||
*/
|
||||
#define SS_ONSTACK 1
|
||||
#define SS_DISABLE 2
|
||||
|
||||
#define MINSIGSTKSZ 2048
|
||||
#define SIGSTKSZ 8192
|
||||
|
||||
#include <asm-generic/signal-defs.h>
|
||||
|
||||
#ifndef __KERNEL__
|
||||
/* Here we must cater to libcs that poke about in kernel headers. */
|
||||
|
||||
struct sigaction {
|
||||
union {
|
||||
__sighandler_t _sa_handler;
|
||||
void (*_sa_sigaction)(int, struct siginfo *, void *);
|
||||
} _u;
|
||||
sigset_t sa_mask;
|
||||
unsigned long sa_flags;
|
||||
void (*sa_restorer)(void);
|
||||
};
|
||||
|
||||
#define sa_handler _u._sa_handler
|
||||
#define sa_sigaction _u._sa_sigaction
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
typedef struct sigaltstack {
|
||||
void *ss_sp;
|
||||
int ss_flags;
|
||||
size_t ss_size;
|
||||
} stack_t;
|
||||
|
||||
|
||||
#endif /* _UAPI_ASM_CRIS_SIGNAL_H */
|
|
@ -0,0 +1,3 @@
|
|||
/*
|
||||
* CRIS byte swapping.
|
||||
*/
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче