Merge branch 'for-linus' into for-next
For updating the HDMI chmap fix. Conflicts: sound/pci/hda/patch_hdmi.c
This commit is contained in:
commit
d820306cbe
@ -18,17 +18,17 @@ this byte for application use, with the following caveats:
|
|||||||
parameters containing user virtual addresses *must* have
|
parameters containing user virtual addresses *must* have
|
||||||
their top byte cleared before trapping to the kernel.
|
their top byte cleared before trapping to the kernel.
|
||||||
|
|
||||||
(2) Tags are not guaranteed to be preserved when delivering
|
(2) Non-zero tags are not preserved when delivering signals.
|
||||||
signals. This means that signal handlers in applications
|
This means that signal handlers in applications making use
|
||||||
making use of tags cannot rely on the tag information for
|
of tags cannot rely on the tag information for user virtual
|
||||||
user virtual addresses being maintained for fields inside
|
addresses being maintained for fields inside siginfo_t.
|
||||||
siginfo_t. One exception to this rule is for signals raised
|
One exception to this rule is for signals raised in response
|
||||||
in response to debug exceptions, where the tag information
|
to watchpoint debug exceptions, where the tag information
|
||||||
will be preserved.
|
will be preserved.
|
||||||
|
|
||||||
(3) Special care should be taken when using tagged pointers,
|
(3) Special care should be taken when using tagged pointers,
|
||||||
since it is likely that C compilers will not hazard two
|
since it is likely that C compilers will not hazard two
|
||||||
addresses differing only in the upper bits.
|
virtual addresses differing only in the upper byte.
|
||||||
|
|
||||||
The architecture prevents the use of a tagged PC, so the upper byte will
|
The architecture prevents the use of a tagged PC, so the upper byte will
|
||||||
be set to a sign-extension of bit 55 on exception return.
|
be set to a sign-extension of bit 55 on exception return.
|
||||||
|
@ -359,11 +359,9 @@ struct inode_operations {
|
|||||||
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
||||||
int (*removexattr) (struct dentry *, const char *);
|
int (*removexattr) (struct dentry *, const char *);
|
||||||
void (*update_time)(struct inode *, struct timespec *, int);
|
void (*update_time)(struct inode *, struct timespec *, int);
|
||||||
int (*atomic_open)(struct inode *, struct dentry *,
|
int (*atomic_open)(struct inode *, struct dentry *, struct file *,
|
||||||
|
unsigned open_flag, umode_t create_mode, int *opened);
|
||||||
int (*tmpfile) (struct inode *, struct dentry *, umode_t);
|
int (*tmpfile) (struct inode *, struct dentry *, umode_t);
|
||||||
} ____cacheline_aligned;
|
|
||||||
struct file *, unsigned open_flag,
|
|
||||||
umode_t create_mode, int *opened);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Again, all methods are called without any locks being held, unless
|
Again, all methods are called without any locks being held, unless
|
||||||
@ -470,9 +468,11 @@ otherwise noted.
|
|||||||
method the filesystem can look up, possibly create and open the file in
|
method the filesystem can look up, possibly create and open the file in
|
||||||
one atomic operation. If it cannot perform this (e.g. the file type
|
one atomic operation. If it cannot perform this (e.g. the file type
|
||||||
turned out to be wrong) it may signal this by returning 1 instead of
|
turned out to be wrong) it may signal this by returning 1 instead of
|
||||||
usual 0 or -ve . This method is only called if the last
|
usual 0 or -ve . This method is only called if the last component is
|
||||||
component is negative or needs lookup. Cached positive dentries are
|
negative or needs lookup. Cached positive dentries are still handled by
|
||||||
still handled by f_op->open().
|
f_op->open(). If the file was created, the FILE_CREATED flag should be
|
||||||
|
set in "opened". In case of O_EXCL the method must only succeed if the
|
||||||
|
file didn't exist and hence FILE_CREATED shall always be set on success.
|
||||||
|
|
||||||
tmpfile: called in the end of O_TMPFILE open(). Optional, equivalent to
|
tmpfile: called in the end of O_TMPFILE open(). Optional, equivalent to
|
||||||
atomically creating, opening and unlinking a file in given directory.
|
atomically creating, opening and unlinking a file in given directory.
|
||||||
|
@ -1362,6 +1362,12 @@ To add ARP targets:
|
|||||||
To remove an ARP target:
|
To remove an ARP target:
|
||||||
# echo -192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target
|
# echo -192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target
|
||||||
|
|
||||||
|
To configure the interval between learning packet transmits:
|
||||||
|
# echo 12 > /sys/class/net/bond0/bonding/lp_interval
|
||||||
|
NOTE: the lp_inteval is the number of seconds between instances where
|
||||||
|
the bonding driver sends learning packets to each slaves peer switch. The
|
||||||
|
default interval is 1 second.
|
||||||
|
|
||||||
Example Configuration
|
Example Configuration
|
||||||
---------------------
|
---------------------
|
||||||
We begin with the same example that is shown in section 3.3,
|
We begin with the same example that is shown in section 3.3,
|
||||||
|
@ -66,9 +66,7 @@ rq->cfs.load value, which is the sum of the weights of the tasks queued on the
|
|||||||
runqueue.
|
runqueue.
|
||||||
|
|
||||||
CFS maintains a time-ordered rbtree, where all runnable tasks are sorted by the
|
CFS maintains a time-ordered rbtree, where all runnable tasks are sorted by the
|
||||||
p->se.vruntime key (there is a subtraction using rq->cfs.min_vruntime to
|
p->se.vruntime key. CFS picks the "leftmost" task from this tree and sticks to it.
|
||||||
account for possible wraparounds). CFS picks the "leftmost" task from this
|
|
||||||
tree and sticks to it.
|
|
||||||
As the system progresses forwards, the executed tasks are put into the tree
|
As the system progresses forwards, the executed tasks are put into the tree
|
||||||
more and more to the right --- slowly but surely giving a chance for every task
|
more and more to the right --- slowly but surely giving a chance for every task
|
||||||
to become the "leftmost task" and thus get on the CPU within a deterministic
|
to become the "leftmost task" and thus get on the CPU within a deterministic
|
||||||
|
@ -296,6 +296,12 @@ Cirrus Logic CS4206/4207
|
|||||||
imac27 IMac 27 Inch
|
imac27 IMac 27 Inch
|
||||||
auto BIOS setup (default)
|
auto BIOS setup (default)
|
||||||
|
|
||||||
|
Cirrus Logic CS4208
|
||||||
|
===================
|
||||||
|
mba6 MacBook Air 6,1 and 6,2
|
||||||
|
gpio0 Enable GPIO 0 amp
|
||||||
|
auto BIOS setup (default)
|
||||||
|
|
||||||
VIA VT17xx/VT18xx/VT20xx
|
VIA VT17xx/VT18xx/VT20xx
|
||||||
========================
|
========================
|
||||||
auto BIOS setup (default)
|
auto BIOS setup (default)
|
||||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
|||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 12
|
PATCHLEVEL = 12
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc1
|
EXTRAVERSION = -rc2
|
||||||
NAME = One Giant Leap for Frogkind
|
NAME = One Giant Leap for Frogkind
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -183,6 +183,7 @@ dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \
|
|||||||
am335x-evm.dtb \
|
am335x-evm.dtb \
|
||||||
am335x-evmsk.dtb \
|
am335x-evmsk.dtb \
|
||||||
am335x-bone.dtb \
|
am335x-bone.dtb \
|
||||||
|
am335x-boneblack.dtb \
|
||||||
am3517-evm.dtb \
|
am3517-evm.dtb \
|
||||||
am3517_mt_ventoux.dtb \
|
am3517_mt_ventoux.dtb \
|
||||||
am43x-epos-evm.dtb
|
am43x-epos-evm.dtb
|
||||||
|
262
arch/arm/boot/dts/am335x-bone-common.dtsi
Normal file
262
arch/arm/boot/dts/am335x-bone-common.dtsi
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "TI AM335x BeagleBone";
|
||||||
|
compatible = "ti,am335x-bone", "ti,am33xx";
|
||||||
|
|
||||||
|
cpus {
|
||||||
|
cpu@0 {
|
||||||
|
cpu0-supply = <&dcdc2_reg>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
memory {
|
||||||
|
device_type = "memory";
|
||||||
|
reg = <0x80000000 0x10000000>; /* 256 MB */
|
||||||
|
};
|
||||||
|
|
||||||
|
am33xx_pinmux: pinmux@44e10800 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&clkout2_pin>;
|
||||||
|
|
||||||
|
user_leds_s0: user_leds_s0 {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
0x54 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a5.gpio1_21 */
|
||||||
|
0x58 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a6.gpio1_22 */
|
||||||
|
0x5c (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a7.gpio1_23 */
|
||||||
|
0x60 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a8.gpio1_24 */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c0_pins: pinmux_i2c0_pins {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
0x188 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_sda.i2c0_sda */
|
||||||
|
0x18c (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_scl.i2c0_scl */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
uart0_pins: pinmux_uart0_pins {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
0x170 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart0_rxd.uart0_rxd */
|
||||||
|
0x174 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart0_txd.uart0_txd */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
clkout2_pin: pinmux_clkout2_pin {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
cpsw_default: cpsw_default {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
/* Slave 1 */
|
||||||
|
0x110 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxerr.mii1_rxerr */
|
||||||
|
0x114 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txen.mii1_txen */
|
||||||
|
0x118 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxdv.mii1_rxdv */
|
||||||
|
0x11c (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd3.mii1_txd3 */
|
||||||
|
0x120 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd2.mii1_txd2 */
|
||||||
|
0x124 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd1.mii1_txd1 */
|
||||||
|
0x128 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd0.mii1_txd0 */
|
||||||
|
0x12c (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_txclk.mii1_txclk */
|
||||||
|
0x130 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxclk.mii1_rxclk */
|
||||||
|
0x134 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd3.mii1_rxd3 */
|
||||||
|
0x138 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd2.mii1_rxd2 */
|
||||||
|
0x13c (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd1.mii1_rxd1 */
|
||||||
|
0x140 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd0.mii1_rxd0 */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
cpsw_sleep: cpsw_sleep {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
/* Slave 1 reset value */
|
||||||
|
0x110 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
0x114 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
0x118 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
0x11c (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
0x120 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
0x124 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
0x128 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
0x12c (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
0x130 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
0x134 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
0x138 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
0x13c (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
0x140 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
davinci_mdio_default: davinci_mdio_default {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
/* MDIO */
|
||||||
|
0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* mdio_data.mdio_data */
|
||||||
|
0x14c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* mdio_clk.mdio_clk */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
davinci_mdio_sleep: davinci_mdio_sleep {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
/* MDIO reset value */
|
||||||
|
0x148 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
0x14c (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
ocp {
|
||||||
|
uart0: serial@44e09000 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&uart0_pins>;
|
||||||
|
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
musb: usb@47400000 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
control@44e10000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
usb-phy@47401300 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
usb-phy@47401b00 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
usb@47401000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
usb@47401800 {
|
||||||
|
status = "okay";
|
||||||
|
dr_mode = "host";
|
||||||
|
};
|
||||||
|
|
||||||
|
dma-controller@07402000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c0: i2c@44e0b000 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c0_pins>;
|
||||||
|
|
||||||
|
status = "okay";
|
||||||
|
clock-frequency = <400000>;
|
||||||
|
|
||||||
|
tps: tps@24 {
|
||||||
|
reg = <0x24>;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
leds {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&user_leds_s0>;
|
||||||
|
|
||||||
|
compatible = "gpio-leds";
|
||||||
|
|
||||||
|
led@2 {
|
||||||
|
label = "beaglebone:green:heartbeat";
|
||||||
|
gpios = <&gpio1 21 GPIO_ACTIVE_HIGH>;
|
||||||
|
linux,default-trigger = "heartbeat";
|
||||||
|
default-state = "off";
|
||||||
|
};
|
||||||
|
|
||||||
|
led@3 {
|
||||||
|
label = "beaglebone:green:mmc0";
|
||||||
|
gpios = <&gpio1 22 GPIO_ACTIVE_HIGH>;
|
||||||
|
linux,default-trigger = "mmc0";
|
||||||
|
default-state = "off";
|
||||||
|
};
|
||||||
|
|
||||||
|
led@4 {
|
||||||
|
label = "beaglebone:green:usr2";
|
||||||
|
gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>;
|
||||||
|
default-state = "off";
|
||||||
|
};
|
||||||
|
|
||||||
|
led@5 {
|
||||||
|
label = "beaglebone:green:usr3";
|
||||||
|
gpios = <&gpio1 24 GPIO_ACTIVE_HIGH>;
|
||||||
|
default-state = "off";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/include/ "tps65217.dtsi"
|
||||||
|
|
||||||
|
&tps {
|
||||||
|
regulators {
|
||||||
|
dcdc1_reg: regulator@0 {
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
dcdc2_reg: regulator@1 {
|
||||||
|
/* VDD_MPU voltage limits 0.95V - 1.26V with +/-4% tolerance */
|
||||||
|
regulator-name = "vdd_mpu";
|
||||||
|
regulator-min-microvolt = <925000>;
|
||||||
|
regulator-max-microvolt = <1325000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
dcdc3_reg: regulator@2 {
|
||||||
|
/* VDD_CORE voltage limits 0.95V - 1.1V with +/-4% tolerance */
|
||||||
|
regulator-name = "vdd_core";
|
||||||
|
regulator-min-microvolt = <925000>;
|
||||||
|
regulator-max-microvolt = <1150000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo1_reg: regulator@3 {
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo2_reg: regulator@4 {
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo3_reg: regulator@5 {
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo4_reg: regulator@6 {
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpsw_emac0 {
|
||||||
|
phy_id = <&davinci_mdio>, <0>;
|
||||||
|
phy-mode = "mii";
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpsw_emac1 {
|
||||||
|
phy_id = <&davinci_mdio>, <1>;
|
||||||
|
phy-mode = "mii";
|
||||||
|
};
|
||||||
|
|
||||||
|
&mac {
|
||||||
|
pinctrl-names = "default", "sleep";
|
||||||
|
pinctrl-0 = <&cpsw_default>;
|
||||||
|
pinctrl-1 = <&cpsw_sleep>;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
&davinci_mdio {
|
||||||
|
pinctrl-names = "default", "sleep";
|
||||||
|
pinctrl-0 = <&davinci_mdio_default>;
|
||||||
|
pinctrl-1 = <&davinci_mdio_sleep>;
|
||||||
|
};
|
@ -8,258 +8,4 @@
|
|||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
#include "am33xx.dtsi"
|
#include "am33xx.dtsi"
|
||||||
|
#include "am335x-bone-common.dtsi"
|
||||||
/ {
|
|
||||||
model = "TI AM335x BeagleBone";
|
|
||||||
compatible = "ti,am335x-bone", "ti,am33xx";
|
|
||||||
|
|
||||||
cpus {
|
|
||||||
cpu@0 {
|
|
||||||
cpu0-supply = <&dcdc2_reg>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
memory {
|
|
||||||
device_type = "memory";
|
|
||||||
reg = <0x80000000 0x10000000>; /* 256 MB */
|
|
||||||
};
|
|
||||||
|
|
||||||
am33xx_pinmux: pinmux@44e10800 {
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&clkout2_pin>;
|
|
||||||
|
|
||||||
user_leds_s0: user_leds_s0 {
|
|
||||||
pinctrl-single,pins = <
|
|
||||||
0x54 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a5.gpio1_21 */
|
|
||||||
0x58 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a6.gpio1_22 */
|
|
||||||
0x5c (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a7.gpio1_23 */
|
|
||||||
0x60 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a8.gpio1_24 */
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
i2c0_pins: pinmux_i2c0_pins {
|
|
||||||
pinctrl-single,pins = <
|
|
||||||
0x188 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_sda.i2c0_sda */
|
|
||||||
0x18c (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_scl.i2c0_scl */
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
uart0_pins: pinmux_uart0_pins {
|
|
||||||
pinctrl-single,pins = <
|
|
||||||
0x170 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart0_rxd.uart0_rxd */
|
|
||||||
0x174 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart0_txd.uart0_txd */
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
clkout2_pin: pinmux_clkout2_pin {
|
|
||||||
pinctrl-single,pins = <
|
|
||||||
0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
cpsw_default: cpsw_default {
|
|
||||||
pinctrl-single,pins = <
|
|
||||||
/* Slave 1 */
|
|
||||||
0x110 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxerr.mii1_rxerr */
|
|
||||||
0x114 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txen.mii1_txen */
|
|
||||||
0x118 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxdv.mii1_rxdv */
|
|
||||||
0x11c (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd3.mii1_txd3 */
|
|
||||||
0x120 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd2.mii1_txd2 */
|
|
||||||
0x124 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd1.mii1_txd1 */
|
|
||||||
0x128 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd0.mii1_txd0 */
|
|
||||||
0x12c (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_txclk.mii1_txclk */
|
|
||||||
0x130 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxclk.mii1_rxclk */
|
|
||||||
0x134 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd3.mii1_rxd3 */
|
|
||||||
0x138 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd2.mii1_rxd2 */
|
|
||||||
0x13c (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd1.mii1_rxd1 */
|
|
||||||
0x140 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd0.mii1_rxd0 */
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
cpsw_sleep: cpsw_sleep {
|
|
||||||
pinctrl-single,pins = <
|
|
||||||
/* Slave 1 reset value */
|
|
||||||
0x110 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
0x114 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
0x118 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
0x11c (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
0x120 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
0x124 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
0x128 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
0x12c (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
0x130 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
0x134 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
0x138 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
0x13c (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
0x140 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
davinci_mdio_default: davinci_mdio_default {
|
|
||||||
pinctrl-single,pins = <
|
|
||||||
/* MDIO */
|
|
||||||
0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* mdio_data.mdio_data */
|
|
||||||
0x14c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* mdio_clk.mdio_clk */
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
davinci_mdio_sleep: davinci_mdio_sleep {
|
|
||||||
pinctrl-single,pins = <
|
|
||||||
/* MDIO reset value */
|
|
||||||
0x148 (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
0x14c (PIN_INPUT_PULLDOWN | MUX_MODE7)
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ocp {
|
|
||||||
uart0: serial@44e09000 {
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&uart0_pins>;
|
|
||||||
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
musb: usb@47400000 {
|
|
||||||
status = "okay";
|
|
||||||
|
|
||||||
control@44e10000 {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
usb-phy@47401300 {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
usb-phy@47401b00 {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
usb@47401000 {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
usb@47401800 {
|
|
||||||
status = "okay";
|
|
||||||
dr_mode = "host";
|
|
||||||
};
|
|
||||||
|
|
||||||
dma-controller@07402000 {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
i2c0: i2c@44e0b000 {
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&i2c0_pins>;
|
|
||||||
|
|
||||||
status = "okay";
|
|
||||||
clock-frequency = <400000>;
|
|
||||||
|
|
||||||
tps: tps@24 {
|
|
||||||
reg = <0x24>;
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
leds {
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&user_leds_s0>;
|
|
||||||
|
|
||||||
compatible = "gpio-leds";
|
|
||||||
|
|
||||||
led@2 {
|
|
||||||
label = "beaglebone:green:heartbeat";
|
|
||||||
gpios = <&gpio1 21 GPIO_ACTIVE_HIGH>;
|
|
||||||
linux,default-trigger = "heartbeat";
|
|
||||||
default-state = "off";
|
|
||||||
};
|
|
||||||
|
|
||||||
led@3 {
|
|
||||||
label = "beaglebone:green:mmc0";
|
|
||||||
gpios = <&gpio1 22 GPIO_ACTIVE_HIGH>;
|
|
||||||
linux,default-trigger = "mmc0";
|
|
||||||
default-state = "off";
|
|
||||||
};
|
|
||||||
|
|
||||||
led@4 {
|
|
||||||
label = "beaglebone:green:usr2";
|
|
||||||
gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>;
|
|
||||||
default-state = "off";
|
|
||||||
};
|
|
||||||
|
|
||||||
led@5 {
|
|
||||||
label = "beaglebone:green:usr3";
|
|
||||||
gpios = <&gpio1 24 GPIO_ACTIVE_HIGH>;
|
|
||||||
default-state = "off";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/include/ "tps65217.dtsi"
|
|
||||||
|
|
||||||
&tps {
|
|
||||||
regulators {
|
|
||||||
dcdc1_reg: regulator@0 {
|
|
||||||
regulator-always-on;
|
|
||||||
};
|
|
||||||
|
|
||||||
dcdc2_reg: regulator@1 {
|
|
||||||
/* VDD_MPU voltage limits 0.95V - 1.26V with +/-4% tolerance */
|
|
||||||
regulator-name = "vdd_mpu";
|
|
||||||
regulator-min-microvolt = <925000>;
|
|
||||||
regulator-max-microvolt = <1325000>;
|
|
||||||
regulator-boot-on;
|
|
||||||
regulator-always-on;
|
|
||||||
};
|
|
||||||
|
|
||||||
dcdc3_reg: regulator@2 {
|
|
||||||
/* VDD_CORE voltage limits 0.95V - 1.1V with +/-4% tolerance */
|
|
||||||
regulator-name = "vdd_core";
|
|
||||||
regulator-min-microvolt = <925000>;
|
|
||||||
regulator-max-microvolt = <1150000>;
|
|
||||||
regulator-boot-on;
|
|
||||||
regulator-always-on;
|
|
||||||
};
|
|
||||||
|
|
||||||
ldo1_reg: regulator@3 {
|
|
||||||
regulator-always-on;
|
|
||||||
};
|
|
||||||
|
|
||||||
ldo2_reg: regulator@4 {
|
|
||||||
regulator-always-on;
|
|
||||||
};
|
|
||||||
|
|
||||||
ldo3_reg: regulator@5 {
|
|
||||||
regulator-always-on;
|
|
||||||
};
|
|
||||||
|
|
||||||
ldo4_reg: regulator@6 {
|
|
||||||
regulator-always-on;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
&cpsw_emac0 {
|
|
||||||
phy_id = <&davinci_mdio>, <0>;
|
|
||||||
phy-mode = "mii";
|
|
||||||
};
|
|
||||||
|
|
||||||
&cpsw_emac1 {
|
|
||||||
phy_id = <&davinci_mdio>, <1>;
|
|
||||||
phy-mode = "mii";
|
|
||||||
};
|
|
||||||
|
|
||||||
&mac {
|
|
||||||
pinctrl-names = "default", "sleep";
|
|
||||||
pinctrl-0 = <&cpsw_default>;
|
|
||||||
pinctrl-1 = <&cpsw_sleep>;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
&davinci_mdio {
|
|
||||||
pinctrl-names = "default", "sleep";
|
|
||||||
pinctrl-0 = <&davinci_mdio_default>;
|
|
||||||
pinctrl-1 = <&davinci_mdio_sleep>;
|
|
||||||
};
|
|
||||||
|
17
arch/arm/boot/dts/am335x-boneblack.dts
Normal file
17
arch/arm/boot/dts/am335x-boneblack.dts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.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.
|
||||||
|
*/
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "am33xx.dtsi"
|
||||||
|
#include "am335x-bone-common.dtsi"
|
||||||
|
|
||||||
|
&ldo3_reg {
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
@ -187,7 +187,7 @@
|
|||||||
compatible = "fsl,imx27-cspi";
|
compatible = "fsl,imx27-cspi";
|
||||||
reg = <0x1000e000 0x1000>;
|
reg = <0x1000e000 0x1000>;
|
||||||
interrupts = <16>;
|
interrupts = <16>;
|
||||||
clocks = <&clks 53>, <&clks 53>;
|
clocks = <&clks 53>, <&clks 60>;
|
||||||
clock-names = "ipg", "per";
|
clock-names = "ipg", "per";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
@ -198,7 +198,7 @@
|
|||||||
compatible = "fsl,imx27-cspi";
|
compatible = "fsl,imx27-cspi";
|
||||||
reg = <0x1000f000 0x1000>;
|
reg = <0x1000f000 0x1000>;
|
||||||
interrupts = <15>;
|
interrupts = <15>;
|
||||||
clocks = <&clks 52>, <&clks 52>;
|
clocks = <&clks 52>, <&clks 60>;
|
||||||
clock-names = "ipg", "per";
|
clock-names = "ipg", "per";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
@ -309,7 +309,7 @@
|
|||||||
compatible = "fsl,imx27-cspi";
|
compatible = "fsl,imx27-cspi";
|
||||||
reg = <0x10017000 0x1000>;
|
reg = <0x10017000 0x1000>;
|
||||||
interrupts = <6>;
|
interrupts = <6>;
|
||||||
clocks = <&clks 51>, <&clks 51>;
|
clocks = <&clks 51>, <&clks 60>;
|
||||||
clock-names = "ipg", "per";
|
clock-names = "ipg", "per";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -474,7 +474,7 @@
|
|||||||
compatible = "fsl,imx51-pata", "fsl,imx27-pata";
|
compatible = "fsl,imx51-pata", "fsl,imx27-pata";
|
||||||
reg = <0x83fe0000 0x4000>;
|
reg = <0x83fe0000 0x4000>;
|
||||||
interrupts = <70>;
|
interrupts = <70>;
|
||||||
clocks = <&clks 161>;
|
clocks = <&clks 172>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -207,8 +207,8 @@
|
|||||||
#define MX6QDL_PAD_EIM_D29__ECSPI4_SS0 0x0c8 0x3dc 0x824 0x2 0x1
|
#define MX6QDL_PAD_EIM_D29__ECSPI4_SS0 0x0c8 0x3dc 0x824 0x2 0x1
|
||||||
#define MX6QDL_PAD_EIM_D29__UART2_RTS_B 0x0c8 0x3dc 0x924 0x4 0x1
|
#define MX6QDL_PAD_EIM_D29__UART2_RTS_B 0x0c8 0x3dc 0x924 0x4 0x1
|
||||||
#define MX6QDL_PAD_EIM_D29__UART2_CTS_B 0x0c8 0x3dc 0x000 0x4 0x0
|
#define MX6QDL_PAD_EIM_D29__UART2_CTS_B 0x0c8 0x3dc 0x000 0x4 0x0
|
||||||
#define MX6QDL_PAD_EIM_D29__UART2_DTE_RTS_B 0x0c4 0x3dc 0x000 0x4 0x0
|
#define MX6QDL_PAD_EIM_D29__UART2_DTE_RTS_B 0x0c8 0x3dc 0x000 0x4 0x0
|
||||||
#define MX6QDL_PAD_EIM_D29__UART2_DTE_CTS_B 0x0c4 0x3dc 0x924 0x4 0x1
|
#define MX6QDL_PAD_EIM_D29__UART2_DTE_CTS_B 0x0c8 0x3dc 0x924 0x4 0x1
|
||||||
#define MX6QDL_PAD_EIM_D29__GPIO3_IO29 0x0c8 0x3dc 0x000 0x5 0x0
|
#define MX6QDL_PAD_EIM_D29__GPIO3_IO29 0x0c8 0x3dc 0x000 0x5 0x0
|
||||||
#define MX6QDL_PAD_EIM_D29__IPU2_CSI1_VSYNC 0x0c8 0x3dc 0x8e4 0x6 0x0
|
#define MX6QDL_PAD_EIM_D29__IPU2_CSI1_VSYNC 0x0c8 0x3dc 0x8e4 0x6 0x0
|
||||||
#define MX6QDL_PAD_EIM_D29__IPU1_DI0_PIN14 0x0c8 0x3dc 0x000 0x7 0x0
|
#define MX6QDL_PAD_EIM_D29__IPU1_DI0_PIN14 0x0c8 0x3dc 0x000 0x7 0x0
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "TI OMAP3 BeagleBoard xM";
|
model = "TI OMAP3 BeagleBoard xM";
|
||||||
compatible = "ti,omap3-beagle-xm, ti,omap3-beagle", "ti,omap3";
|
compatible = "ti,omap3-beagle-xm", "ti,omap3-beagle", "ti,omap3";
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
cpu@0 {
|
cpu@0 {
|
||||||
|
@ -48,6 +48,15 @@
|
|||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mcbsp2_pins: pinmux_mcbsp2_pins {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
0x10c (PIN_INPUT | MUX_MODE0) /* mcbsp2_fsx.mcbsp2_fsx */
|
||||||
|
0x10e (PIN_INPUT | MUX_MODE0) /* mcbsp2_clkx.mcbsp2_clkx */
|
||||||
|
0x110 (PIN_INPUT | MUX_MODE0) /* mcbsp2_dr.mcbsp2.dr */
|
||||||
|
0x112 (PIN_OUTPUT | MUX_MODE0) /* mcbsp2_dx.mcbsp2_dx */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
mmc1_pins: pinmux_mmc1_pins {
|
mmc1_pins: pinmux_mmc1_pins {
|
||||||
pinctrl-single,pins = <
|
pinctrl-single,pins = <
|
||||||
0x114 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_clk.sdmmc1_clk */
|
0x114 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_clk.sdmmc1_clk */
|
||||||
@ -93,6 +102,11 @@
|
|||||||
clock-frequency = <400000>;
|
clock-frequency = <400000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&mcbsp2 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&mcbsp2_pins>;
|
||||||
|
};
|
||||||
|
|
||||||
&mmc1 {
|
&mmc1 {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&mmc1_pins>;
|
pinctrl-0 = <&mmc1_pins>;
|
||||||
|
@ -107,6 +107,19 @@
|
|||||||
*/
|
*/
|
||||||
clock-frequency = <19200000>;
|
clock-frequency = <19200000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* regulator for wl12xx on sdio5 */
|
||||||
|
wl12xx_vmmc: wl12xx_vmmc {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&wl12xx_gpio>;
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "vwl1271";
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
gpio = <&gpio2 11 0>;
|
||||||
|
startup-delay-us = <70000>;
|
||||||
|
enable-active-high;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&omap4_pmx_wkup {
|
&omap4_pmx_wkup {
|
||||||
@ -235,6 +248,33 @@
|
|||||||
0x1c (PIN_OUTPUT | MUX_MODE3) /* gpio_wk8 */
|
0x1c (PIN_OUTPUT | MUX_MODE3) /* gpio_wk8 */
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* wl12xx GPIO outputs for WLAN_EN, BT_EN, FM_EN, BT_WAKEUP
|
||||||
|
* REVISIT: Are the pull-ups needed for GPIO 48 and 49?
|
||||||
|
*/
|
||||||
|
wl12xx_gpio: pinmux_wl12xx_gpio {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
0x26 (PIN_OUTPUT | MUX_MODE3) /* gpmc_a19.gpio_43 */
|
||||||
|
0x2c (PIN_OUTPUT | MUX_MODE3) /* gpmc_a22.gpio_46 */
|
||||||
|
0x30 (PIN_OUTPUT_PULLUP | MUX_MODE3) /* gpmc_a24.gpio_48 */
|
||||||
|
0x32 (PIN_OUTPUT_PULLUP | MUX_MODE3) /* gpmc_a25.gpio_49 */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* wl12xx GPIO inputs and SDIO pins */
|
||||||
|
wl12xx_pins: pinmux_wl12xx_pins {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
0x38 (PIN_INPUT | MUX_MODE3) /* gpmc_ncs2.gpio_52 */
|
||||||
|
0x3a (PIN_INPUT | MUX_MODE3) /* gpmc_ncs3.gpio_53 */
|
||||||
|
0x108 (PIN_OUTPUT | MUX_MODE0) /* sdmmc5_clk.sdmmc5_clk */
|
||||||
|
0x10a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_cmd.sdmmc5_cmd */
|
||||||
|
0x10c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat0.sdmmc5_dat0 */
|
||||||
|
0x10e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat1.sdmmc5_dat1 */
|
||||||
|
0x110 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat2.sdmmc5_dat2 */
|
||||||
|
0x112 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat3.sdmmc5_dat3 */
|
||||||
|
>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&i2c1 {
|
&i2c1 {
|
||||||
@ -314,8 +354,12 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&mmc5 {
|
&mmc5 {
|
||||||
ti,non-removable;
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&wl12xx_pins>;
|
||||||
|
vmmc-supply = <&wl12xx_vmmc>;
|
||||||
|
non-removable;
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
|
cap-power-off-card;
|
||||||
};
|
};
|
||||||
|
|
||||||
&emif1 {
|
&emif1 {
|
||||||
|
@ -140,6 +140,19 @@
|
|||||||
"DMic", "Digital Mic",
|
"DMic", "Digital Mic",
|
||||||
"Digital Mic", "Digital Mic1 Bias";
|
"Digital Mic", "Digital Mic1 Bias";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* regulator for wl12xx on sdio5 */
|
||||||
|
wl12xx_vmmc: wl12xx_vmmc {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&wl12xx_gpio>;
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "vwl1271";
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
gpio = <&gpio2 22 0>;
|
||||||
|
startup-delay-us = <70000>;
|
||||||
|
enable-active-high;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&omap4_pmx_wkup {
|
&omap4_pmx_wkup {
|
||||||
@ -295,6 +308,26 @@
|
|||||||
0xf0 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c4_sda */
|
0xf0 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c4_sda */
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* wl12xx GPIO output for WLAN_EN */
|
||||||
|
wl12xx_gpio: pinmux_wl12xx_gpio {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
0x3c (PIN_OUTPUT | MUX_MODE3) /* gpmc_nwp.gpio_54 */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* wl12xx GPIO inputs and SDIO pins */
|
||||||
|
wl12xx_pins: pinmux_wl12xx_pins {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
0x3a (PIN_INPUT | MUX_MODE3) /* gpmc_ncs3.gpio_53 */
|
||||||
|
0x108 (PIN_OUTPUT | MUX_MODE3) /* sdmmc5_clk.sdmmc5_clk */
|
||||||
|
0x10a (PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc5_cmd.sdmmc5_cmd */
|
||||||
|
0x10c (PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc5_dat0.sdmmc5_dat0 */
|
||||||
|
0x10e (PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc5_dat1.sdmmc5_dat1 */
|
||||||
|
0x110 (PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc5_dat2.sdmmc5_dat2 */
|
||||||
|
0x112 (PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc5_dat3.sdmmc5_dat3 */
|
||||||
|
>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&i2c1 {
|
&i2c1 {
|
||||||
@ -420,8 +453,12 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&mmc5 {
|
&mmc5 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&wl12xx_pins>;
|
||||||
|
vmmc-supply = <&wl12xx_vmmc>;
|
||||||
|
non-removable;
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
ti,non-removable;
|
cap-power-off-card;
|
||||||
};
|
};
|
||||||
|
|
||||||
&emif1 {
|
&emif1 {
|
||||||
|
@ -637,7 +637,7 @@
|
|||||||
omap_dwc3@4a020000 {
|
omap_dwc3@4a020000 {
|
||||||
compatible = "ti,dwc3";
|
compatible = "ti,dwc3";
|
||||||
ti,hwmods = "usb_otg_ss";
|
ti,hwmods = "usb_otg_ss";
|
||||||
reg = <0x4a020000 0x1000>;
|
reg = <0x4a020000 0x10000>;
|
||||||
interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
@ -645,17 +645,18 @@
|
|||||||
ranges;
|
ranges;
|
||||||
dwc3@4a030000 {
|
dwc3@4a030000 {
|
||||||
compatible = "snps,dwc3";
|
compatible = "snps,dwc3";
|
||||||
reg = <0x4a030000 0x1000>;
|
reg = <0x4a030000 0x10000>;
|
||||||
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
usb-phy = <&usb2_phy>, <&usb3_phy>;
|
usb-phy = <&usb2_phy>, <&usb3_phy>;
|
||||||
tx-fifo-resize;
|
tx-fifo-resize;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
ocp2scp {
|
ocp2scp@4a080000 {
|
||||||
compatible = "ti,omap-ocp2scp";
|
compatible = "ti,omap-ocp2scp";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
reg = <0x4a080000 0x20>;
|
||||||
ranges;
|
ranges;
|
||||||
ti,hwmods = "ocp2scp1";
|
ti,hwmods = "ocp2scp1";
|
||||||
usb2_phy: usb2phy@4a084000 {
|
usb2_phy: usb2phy@4a084000 {
|
||||||
|
@ -36,6 +36,7 @@ CONFIG_ARCH_TEGRA_114_SOC=y
|
|||||||
CONFIG_TEGRA_PCI=y
|
CONFIG_TEGRA_PCI=y
|
||||||
CONFIG_TEGRA_EMC_SCALING_ENABLE=y
|
CONFIG_TEGRA_EMC_SCALING_ENABLE=y
|
||||||
CONFIG_ARCH_U8500=y
|
CONFIG_ARCH_U8500=y
|
||||||
|
CONFIG_MACH_HREFV60=y
|
||||||
CONFIG_MACH_SNOWBALL=y
|
CONFIG_MACH_SNOWBALL=y
|
||||||
CONFIG_MACH_UX500_DT=y
|
CONFIG_MACH_UX500_DT=y
|
||||||
CONFIG_ARCH_VEXPRESS=y
|
CONFIG_ARCH_VEXPRESS=y
|
||||||
@ -46,6 +47,7 @@ CONFIG_ARCH_ZYNQ=y
|
|||||||
CONFIG_SMP=y
|
CONFIG_SMP=y
|
||||||
CONFIG_HIGHPTE=y
|
CONFIG_HIGHPTE=y
|
||||||
CONFIG_ARM_APPENDED_DTB=y
|
CONFIG_ARM_APPENDED_DTB=y
|
||||||
|
CONFIG_ARM_ATAG_DTB_COMPAT=y
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
CONFIG_INET=y
|
CONFIG_INET=y
|
||||||
|
@ -90,6 +90,7 @@ struct clk *imx_clk_fixup_mux(const char *name, void __iomem *reg,
|
|||||||
init.ops = &clk_fixup_mux_ops;
|
init.ops = &clk_fixup_mux_ops;
|
||||||
init.parent_names = parents;
|
init.parent_names = parents;
|
||||||
init.num_parents = num_parents;
|
init.num_parents = num_parents;
|
||||||
|
init.flags = 0;
|
||||||
|
|
||||||
fixup_mux->mux.reg = reg;
|
fixup_mux->mux.reg = reg;
|
||||||
fixup_mux->mux.shift = shift;
|
fixup_mux->mux.shift = shift;
|
||||||
|
@ -285,7 +285,7 @@ int __init mx27_clocks_init(unsigned long fref)
|
|||||||
clk_register_clkdev(clk[ata_ahb_gate], "ata", NULL);
|
clk_register_clkdev(clk[ata_ahb_gate], "ata", NULL);
|
||||||
clk_register_clkdev(clk[rtc_ipg_gate], NULL, "imx21-rtc");
|
clk_register_clkdev(clk[rtc_ipg_gate], NULL, "imx21-rtc");
|
||||||
clk_register_clkdev(clk[scc_ipg_gate], "scc", NULL);
|
clk_register_clkdev(clk[scc_ipg_gate], "scc", NULL);
|
||||||
clk_register_clkdev(clk[cpu_div], NULL, "cpufreq-cpu0.0");
|
clk_register_clkdev(clk[cpu_div], NULL, "cpu0");
|
||||||
clk_register_clkdev(clk[emi_ahb_gate], "emi_ahb" , NULL);
|
clk_register_clkdev(clk[emi_ahb_gate], "emi_ahb" , NULL);
|
||||||
|
|
||||||
mxc_timer_init(MX27_IO_ADDRESS(MX27_GPT1_BASE_ADDR), MX27_INT_GPT1);
|
mxc_timer_init(MX27_IO_ADDRESS(MX27_GPT1_BASE_ADDR), MX27_INT_GPT1);
|
||||||
|
@ -328,7 +328,7 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,
|
|||||||
clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1");
|
clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1");
|
||||||
clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "imx-ssi.2");
|
clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "imx-ssi.2");
|
||||||
clk_register_clkdev(clk[sdma_gate], NULL, "imx35-sdma");
|
clk_register_clkdev(clk[sdma_gate], NULL, "imx35-sdma");
|
||||||
clk_register_clkdev(clk[cpu_podf], NULL, "cpufreq-cpu0.0");
|
clk_register_clkdev(clk[cpu_podf], NULL, "cpu0");
|
||||||
clk_register_clkdev(clk[iim_gate], "iim", NULL);
|
clk_register_clkdev(clk[iim_gate], "iim", NULL);
|
||||||
clk_register_clkdev(clk[dummy], NULL, "imx2-wdt.0");
|
clk_register_clkdev(clk[dummy], NULL, "imx2-wdt.0");
|
||||||
clk_register_clkdev(clk[dummy], NULL, "imx2-wdt.1");
|
clk_register_clkdev(clk[dummy], NULL, "imx2-wdt.1");
|
||||||
@ -397,7 +397,7 @@ int __init mx51_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,
|
|||||||
mx51_spdif_xtal_sel, ARRAY_SIZE(mx51_spdif_xtal_sel));
|
mx51_spdif_xtal_sel, ARRAY_SIZE(mx51_spdif_xtal_sel));
|
||||||
clk[spdif1_sel] = imx_clk_mux("spdif1_sel", MXC_CCM_CSCMR2, 2, 2,
|
clk[spdif1_sel] = imx_clk_mux("spdif1_sel", MXC_CCM_CSCMR2, 2, 2,
|
||||||
spdif_sel, ARRAY_SIZE(spdif_sel));
|
spdif_sel, ARRAY_SIZE(spdif_sel));
|
||||||
clk[spdif1_pred] = imx_clk_divider("spdif1_podf", "spdif1_sel", MXC_CCM_CDCDR, 16, 3);
|
clk[spdif1_pred] = imx_clk_divider("spdif1_pred", "spdif1_sel", MXC_CCM_CDCDR, 16, 3);
|
||||||
clk[spdif1_podf] = imx_clk_divider("spdif1_podf", "spdif1_pred", MXC_CCM_CDCDR, 9, 6);
|
clk[spdif1_podf] = imx_clk_divider("spdif1_podf", "spdif1_pred", MXC_CCM_CDCDR, 9, 6);
|
||||||
clk[spdif1_com_sel] = imx_clk_mux("spdif1_com_sel", MXC_CCM_CSCMR2, 5, 1,
|
clk[spdif1_com_sel] = imx_clk_mux("spdif1_com_sel", MXC_CCM_CSCMR2, 5, 1,
|
||||||
mx51_spdif1_com_sel, ARRAY_SIZE(mx51_spdif1_com_sel));
|
mx51_spdif1_com_sel, ARRAY_SIZE(mx51_spdif1_com_sel));
|
||||||
|
@ -233,10 +233,15 @@ put_node:
|
|||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init imx6q_opp_init(struct device *cpu_dev)
|
static void __init imx6q_opp_init(void)
|
||||||
{
|
{
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
|
struct device *cpu_dev = get_cpu_device(0);
|
||||||
|
|
||||||
|
if (!cpu_dev) {
|
||||||
|
pr_warn("failed to get cpu0 device\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
np = of_node_get(cpu_dev->of_node);
|
np = of_node_get(cpu_dev->of_node);
|
||||||
if (!np) {
|
if (!np) {
|
||||||
pr_warn("failed to find cpu0 node\n");
|
pr_warn("failed to find cpu0 node\n");
|
||||||
@ -268,7 +273,7 @@ static void __init imx6q_init_late(void)
|
|||||||
imx6q_cpuidle_init();
|
imx6q_cpuidle_init();
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ)) {
|
if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ)) {
|
||||||
imx6q_opp_init(&imx6q_cpufreq_pdev.dev);
|
imx6q_opp_init();
|
||||||
platform_device_register(&imx6q_cpufreq_pdev);
|
platform_device_register(&imx6q_cpufreq_pdev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,6 +117,17 @@ void __init imx_init_l2cache(void)
|
|||||||
/* Configure the L2 PREFETCH and POWER registers */
|
/* Configure the L2 PREFETCH and POWER registers */
|
||||||
val = readl_relaxed(l2x0_base + L2X0_PREFETCH_CTRL);
|
val = readl_relaxed(l2x0_base + L2X0_PREFETCH_CTRL);
|
||||||
val |= 0x70800000;
|
val |= 0x70800000;
|
||||||
|
/*
|
||||||
|
* The L2 cache controller(PL310) version on the i.MX6D/Q is r3p1-50rel0
|
||||||
|
* The L2 cache controller(PL310) version on the i.MX6DL/SOLO/SL is r3p2
|
||||||
|
* But according to ARM PL310 errata: 752271
|
||||||
|
* ID: 752271: Double linefill feature can cause data corruption
|
||||||
|
* Fault Status: Present in: r3p0, r3p1, r3p1-50rel0. Fixed in r3p2
|
||||||
|
* Workaround: The only workaround to this erratum is to disable the
|
||||||
|
* double linefill feature. This is the default behavior.
|
||||||
|
*/
|
||||||
|
if (cpu_is_imx6q())
|
||||||
|
val &= ~(1 << 30 | 1 << 23);
|
||||||
writel_relaxed(val, l2x0_base + L2X0_PREFETCH_CTRL);
|
writel_relaxed(val, l2x0_base + L2X0_PREFETCH_CTRL);
|
||||||
val = L2X0_DYNAMIC_CLK_GATING_EN | L2X0_STNDBY_MODE_EN;
|
val = L2X0_DYNAMIC_CLK_GATING_EN | L2X0_STNDBY_MODE_EN;
|
||||||
writel_relaxed(val, l2x0_base + L2X0_POWER_CTRL);
|
writel_relaxed(val, l2x0_base + L2X0_POWER_CTRL);
|
||||||
|
@ -1632,7 +1632,7 @@ static struct omap_clk omap44xx_clks[] = {
|
|||||||
CLK(NULL, "auxclk5_src_ck", &auxclk5_src_ck),
|
CLK(NULL, "auxclk5_src_ck", &auxclk5_src_ck),
|
||||||
CLK(NULL, "auxclk5_ck", &auxclk5_ck),
|
CLK(NULL, "auxclk5_ck", &auxclk5_ck),
|
||||||
CLK(NULL, "auxclkreq5_ck", &auxclkreq5_ck),
|
CLK(NULL, "auxclkreq5_ck", &auxclkreq5_ck),
|
||||||
CLK("omap-gpmc", "fck", &dummy_ck),
|
CLK("50000000.gpmc", "fck", &dummy_ck),
|
||||||
CLK("omap_i2c.1", "ick", &dummy_ck),
|
CLK("omap_i2c.1", "ick", &dummy_ck),
|
||||||
CLK("omap_i2c.2", "ick", &dummy_ck),
|
CLK("omap_i2c.2", "ick", &dummy_ck),
|
||||||
CLK("omap_i2c.3", "ick", &dummy_ck),
|
CLK("omap_i2c.3", "ick", &dummy_ck),
|
||||||
|
@ -143,7 +143,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
|
|||||||
* Call idle CPU cluster PM exit notifier chain
|
* Call idle CPU cluster PM exit notifier chain
|
||||||
* to restore GIC and wakeupgen context.
|
* to restore GIC and wakeupgen context.
|
||||||
*/
|
*/
|
||||||
if ((cx->mpu_state == PWRDM_POWER_RET) &&
|
if (dev->cpu == 0 && (cx->mpu_state == PWRDM_POWER_RET) &&
|
||||||
(cx->mpu_logic_state == PWRDM_POWER_OFF))
|
(cx->mpu_logic_state == PWRDM_POWER_OFF))
|
||||||
cpu_cluster_pm_exit();
|
cpu_cluster_pm_exit();
|
||||||
|
|
||||||
|
@ -1491,8 +1491,8 @@ static int gpmc_probe_generic_child(struct platform_device *pdev,
|
|||||||
*/
|
*/
|
||||||
ret = gpmc_cs_remap(cs, res.start);
|
ret = gpmc_cs_remap(cs, res.start);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(&pdev->dev, "cannot remap GPMC CS %d to 0x%x\n",
|
dev_err(&pdev->dev, "cannot remap GPMC CS %d to %pa\n",
|
||||||
cs, res.start);
|
cs, &res.start);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -620,7 +620,7 @@ static struct omap_mux __initdata omap3_muxmodes[] = {
|
|||||||
"uart1_rts", "ssi1_flag_tx", NULL, NULL,
|
"uart1_rts", "ssi1_flag_tx", NULL, NULL,
|
||||||
"gpio_149", NULL, NULL, "safe_mode"),
|
"gpio_149", NULL, NULL, "safe_mode"),
|
||||||
_OMAP3_MUXENTRY(UART1_RX, 151,
|
_OMAP3_MUXENTRY(UART1_RX, 151,
|
||||||
"uart1_rx", "ss1_wake_tx", "mcbsp1_clkr", "mcspi4_clk",
|
"uart1_rx", "ssi1_wake_tx", "mcbsp1_clkr", "mcspi4_clk",
|
||||||
"gpio_151", NULL, NULL, "safe_mode"),
|
"gpio_151", NULL, NULL, "safe_mode"),
|
||||||
_OMAP3_MUXENTRY(UART1_TX, 148,
|
_OMAP3_MUXENTRY(UART1_TX, 148,
|
||||||
"uart1_tx", "ssi1_dat_tx", NULL, NULL,
|
"uart1_tx", "ssi1_dat_tx", NULL, NULL,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* OMAP4 SMP source file. It contains platform specific fucntions
|
* OMAP4 SMP source file. It contains platform specific functions
|
||||||
* needed for the linux smp kernel.
|
* needed for the linux smp kernel.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2009 Texas Instruments, Inc.
|
* Copyright (C) 2009 Texas Instruments, Inc.
|
||||||
|
@ -158,7 +158,7 @@ static int omap_device_build_from_dt(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
od = omap_device_alloc(pdev, hwmods, oh_cnt);
|
od = omap_device_alloc(pdev, hwmods, oh_cnt);
|
||||||
if (!od) {
|
if (IS_ERR(od)) {
|
||||||
dev_err(&pdev->dev, "Cannot allocate omap_device for :%s\n",
|
dev_err(&pdev->dev, "Cannot allocate omap_device for :%s\n",
|
||||||
oh_name);
|
oh_name);
|
||||||
ret = PTR_ERR(od);
|
ret = PTR_ERR(od);
|
||||||
|
@ -289,7 +289,7 @@ static void collie_flash_exit(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct flash_platform_data collie_flash_data = {
|
static struct flash_platform_data collie_flash_data = {
|
||||||
.map_name = "cfi_probe",
|
.map_name = "jedec_probe",
|
||||||
.init = collie_flash_init,
|
.init = collie_flash_init,
|
||||||
.set_vpp = collie_set_vpp,
|
.set_vpp = collie_set_vpp,
|
||||||
.exit = collie_flash_exit,
|
.exit = collie_flash_exit,
|
||||||
|
@ -555,7 +555,7 @@ static struct clk_lookup lookups[] = {
|
|||||||
CLKDEV_CON_ID("pll2h", &pll2h_clk),
|
CLKDEV_CON_ID("pll2h", &pll2h_clk),
|
||||||
|
|
||||||
/* CPU clock */
|
/* CPU clock */
|
||||||
CLKDEV_DEV_ID("cpufreq-cpu0", &z_clk),
|
CLKDEV_DEV_ID("cpu0", &z_clk),
|
||||||
|
|
||||||
/* DIV6 */
|
/* DIV6 */
|
||||||
CLKDEV_CON_ID("zb", &div6_clks[DIV6_ZB]),
|
CLKDEV_CON_ID("zb", &div6_clks[DIV6_ZB]),
|
||||||
|
@ -616,7 +616,7 @@ static struct clk_lookup lookups[] = {
|
|||||||
CLKDEV_DEV_ID("smp_twd", &twd_clk), /* smp_twd */
|
CLKDEV_DEV_ID("smp_twd", &twd_clk), /* smp_twd */
|
||||||
|
|
||||||
/* DIV4 clocks */
|
/* DIV4 clocks */
|
||||||
CLKDEV_DEV_ID("cpufreq-cpu0", &div4_clks[DIV4_Z]),
|
CLKDEV_DEV_ID("cpu0", &div4_clks[DIV4_Z]),
|
||||||
|
|
||||||
/* DIV6 clocks */
|
/* DIV6 clocks */
|
||||||
CLKDEV_CON_ID("vck1_clk", &div6_clks[DIV6_VCK1]),
|
CLKDEV_CON_ID("vck1_clk", &div6_clks[DIV6_VCK1]),
|
||||||
|
@ -1,7 +1,3 @@
|
|||||||
menu "ST-Ericsson AB U300/U335 Platform"
|
|
||||||
|
|
||||||
comment "ST-Ericsson Mobile Platform Products"
|
|
||||||
|
|
||||||
config ARCH_U300
|
config ARCH_U300
|
||||||
bool "ST-Ericsson U300 Series" if ARCH_MULTI_V5
|
bool "ST-Ericsson U300 Series" if ARCH_MULTI_V5
|
||||||
depends on MMU
|
depends on MMU
|
||||||
@ -25,7 +21,9 @@ config ARCH_U300
|
|||||||
help
|
help
|
||||||
Support for ST-Ericsson U300 series mobile platforms.
|
Support for ST-Ericsson U300 series mobile platforms.
|
||||||
|
|
||||||
comment "ST-Ericsson U300/U335 Feature Selections"
|
if ARCH_U300
|
||||||
|
|
||||||
|
menu "ST-Ericsson AB U300/U335 Platform"
|
||||||
|
|
||||||
config MACH_U300
|
config MACH_U300
|
||||||
depends on ARCH_U300
|
depends on ARCH_U300
|
||||||
@ -53,3 +51,5 @@ config MACH_U300_SPIDUMMY
|
|||||||
SPI framework and ARM PL022 support.
|
SPI framework and ARM PL022 support.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
endif
|
||||||
|
@ -69,6 +69,7 @@ static int __init ux500_l2x0_init(void)
|
|||||||
* some SMI service available.
|
* some SMI service available.
|
||||||
*/
|
*/
|
||||||
outer_cache.disable = NULL;
|
outer_cache.disable = NULL;
|
||||||
|
outer_cache.set_debug = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,6 @@
|
|||||||
COMPAT_HWCAP_VFPv3|COMPAT_HWCAP_VFPv4|\
|
COMPAT_HWCAP_VFPv3|COMPAT_HWCAP_VFPv4|\
|
||||||
COMPAT_HWCAP_NEON|COMPAT_HWCAP_IDIV)
|
COMPAT_HWCAP_NEON|COMPAT_HWCAP_IDIV)
|
||||||
|
|
||||||
extern unsigned int elf_hwcap;
|
extern unsigned long elf_hwcap;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -143,15 +143,26 @@ void machine_restart(char *cmd)
|
|||||||
|
|
||||||
void __show_regs(struct pt_regs *regs)
|
void __show_regs(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int i;
|
int i, top_reg;
|
||||||
|
u64 lr, sp;
|
||||||
|
|
||||||
|
if (compat_user_mode(regs)) {
|
||||||
|
lr = regs->compat_lr;
|
||||||
|
sp = regs->compat_sp;
|
||||||
|
top_reg = 12;
|
||||||
|
} else {
|
||||||
|
lr = regs->regs[30];
|
||||||
|
sp = regs->sp;
|
||||||
|
top_reg = 29;
|
||||||
|
}
|
||||||
|
|
||||||
show_regs_print_info(KERN_DEFAULT);
|
show_regs_print_info(KERN_DEFAULT);
|
||||||
print_symbol("PC is at %s\n", instruction_pointer(regs));
|
print_symbol("PC is at %s\n", instruction_pointer(regs));
|
||||||
print_symbol("LR is at %s\n", regs->regs[30]);
|
print_symbol("LR is at %s\n", lr);
|
||||||
printk("pc : [<%016llx>] lr : [<%016llx>] pstate: %08llx\n",
|
printk("pc : [<%016llx>] lr : [<%016llx>] pstate: %08llx\n",
|
||||||
regs->pc, regs->regs[30], regs->pstate);
|
regs->pc, lr, regs->pstate);
|
||||||
printk("sp : %016llx\n", regs->sp);
|
printk("sp : %016llx\n", sp);
|
||||||
for (i = 29; i >= 0; i--) {
|
for (i = top_reg; i >= 0; i--) {
|
||||||
printk("x%-2d: %016llx ", i, regs->regs[i]);
|
printk("x%-2d: %016llx ", i, regs->regs[i]);
|
||||||
if (i % 2 == 0)
|
if (i % 2 == 0)
|
||||||
printk("\n");
|
printk("\n");
|
||||||
|
@ -57,7 +57,7 @@
|
|||||||
unsigned int processor_id;
|
unsigned int processor_id;
|
||||||
EXPORT_SYMBOL(processor_id);
|
EXPORT_SYMBOL(processor_id);
|
||||||
|
|
||||||
unsigned int elf_hwcap __read_mostly;
|
unsigned long elf_hwcap __read_mostly;
|
||||||
EXPORT_SYMBOL_GPL(elf_hwcap);
|
EXPORT_SYMBOL_GPL(elf_hwcap);
|
||||||
|
|
||||||
static const char *cpu_name;
|
static const char *cpu_name;
|
||||||
|
@ -130,7 +130,7 @@ static void __do_user_fault(struct task_struct *tsk, unsigned long addr,
|
|||||||
force_sig_info(sig, &si, tsk);
|
force_sig_info(sig, &si, tsk);
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_bad_area(unsigned long addr, unsigned int esr, struct pt_regs *regs)
|
static void do_bad_area(unsigned long addr, unsigned int esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct task_struct *tsk = current;
|
struct task_struct *tsk = current;
|
||||||
struct mm_struct *mm = tsk->active_mm;
|
struct mm_struct *mm = tsk->active_mm;
|
||||||
|
@ -288,9 +288,6 @@ endif
|
|||||||
vmlinux.32: vmlinux
|
vmlinux.32: vmlinux
|
||||||
$(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@
|
$(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@
|
||||||
|
|
||||||
|
|
||||||
#obj-$(CONFIG_KPROBES) += kprobes.o
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# The 64-bit ELF tools are pretty broken so at this time we generate 64-bit
|
# The 64-bit ELF tools are pretty broken so at this time we generate 64-bit
|
||||||
# ELF files from 32-bit files by conversion.
|
# ELF files from 32-bit files by conversion.
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <linux/syscore_ops.h>
|
#include <linux/syscore_ops.h>
|
||||||
|
#include <asm/cpu.h>
|
||||||
#include <asm/mach-au1x00/au1000.h>
|
#include <asm/mach-au1x00/au1000.h>
|
||||||
|
|
||||||
/* control register offsets */
|
/* control register offsets */
|
||||||
@ -358,7 +359,7 @@ static inline int au1200_coherency_bug(void)
|
|||||||
{
|
{
|
||||||
#if defined(CONFIG_DMA_COHERENT)
|
#if defined(CONFIG_DMA_COHERENT)
|
||||||
/* Au1200 AB USB does not support coherent memory */
|
/* Au1200 AB USB does not support coherent memory */
|
||||||
if (!(read_c0_prid() & 0xff)) {
|
if (!(read_c0_prid() & PRID_REV_MASK)) {
|
||||||
printk(KERN_INFO "Au1200 USB: this is chip revision AB !!\n");
|
printk(KERN_INFO "Au1200 USB: this is chip revision AB !!\n");
|
||||||
printk(KERN_INFO "Au1200 USB: update your board or re-configure"
|
printk(KERN_INFO "Au1200 USB: update your board or re-configure"
|
||||||
" the kernel\n");
|
" the kernel\n");
|
||||||
|
@ -306,14 +306,14 @@ void __init bcm63xx_cpu_init(void)
|
|||||||
|
|
||||||
switch (c->cputype) {
|
switch (c->cputype) {
|
||||||
case CPU_BMIPS3300:
|
case CPU_BMIPS3300:
|
||||||
if ((read_c0_prid() & 0xff00) != PRID_IMP_BMIPS3300_ALT)
|
if ((read_c0_prid() & PRID_IMP_MASK) != PRID_IMP_BMIPS3300_ALT)
|
||||||
__cpu_name[cpu] = "Broadcom BCM6338";
|
__cpu_name[cpu] = "Broadcom BCM6338";
|
||||||
/* fall-through */
|
/* fall-through */
|
||||||
case CPU_BMIPS32:
|
case CPU_BMIPS32:
|
||||||
chipid_reg = BCM_6345_PERF_BASE;
|
chipid_reg = BCM_6345_PERF_BASE;
|
||||||
break;
|
break;
|
||||||
case CPU_BMIPS4350:
|
case CPU_BMIPS4350:
|
||||||
switch ((read_c0_prid() & 0xff)) {
|
switch ((read_c0_prid() & PRID_REV_MASK)) {
|
||||||
case 0x04:
|
case 0x04:
|
||||||
chipid_reg = BCM_3368_PERF_BASE;
|
chipid_reg = BCM_3368_PERF_BASE;
|
||||||
break;
|
break;
|
||||||
|
@ -1 +1 @@
|
|||||||
../../../../../include/dt-bindings
|
../../../../../include/dt-bindings
|
@ -12,6 +12,7 @@
|
|||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
|
|
||||||
#include <asm/cpu-info.h>
|
#include <asm/cpu-info.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
|
|
||||||
#include <asm/octeon/octeon.h>
|
#include <asm/octeon/octeon.h>
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include <asm/bootinfo.h>
|
#include <asm/bootinfo.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
|
|
||||||
#include <asm/dec/prom.h>
|
#include <asm/dec/prom.h>
|
||||||
|
@ -13,12 +13,6 @@
|
|||||||
#include <asm/cpu-info.h>
|
#include <asm/cpu-info.h>
|
||||||
#include <cpu-feature-overrides.h>
|
#include <cpu-feature-overrides.h>
|
||||||
|
|
||||||
#ifndef current_cpu_type
|
|
||||||
#define current_cpu_type() current_cpu_data.cputype
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define boot_cpu_type() cpu_data[0].cputype
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SMP assumption: Options of CPU 0 are a superset of all processors.
|
* SMP assumption: Options of CPU 0 are a superset of all processors.
|
||||||
* This is true for all known MIPS systems.
|
* This is true for all known MIPS systems.
|
||||||
|
@ -84,6 +84,7 @@ struct cpuinfo_mips {
|
|||||||
extern struct cpuinfo_mips cpu_data[];
|
extern struct cpuinfo_mips cpu_data[];
|
||||||
#define current_cpu_data cpu_data[smp_processor_id()]
|
#define current_cpu_data cpu_data[smp_processor_id()]
|
||||||
#define raw_current_cpu_data cpu_data[raw_smp_processor_id()]
|
#define raw_current_cpu_data cpu_data[raw_smp_processor_id()]
|
||||||
|
#define boot_cpu_data cpu_data[0]
|
||||||
|
|
||||||
extern void cpu_probe(void);
|
extern void cpu_probe(void);
|
||||||
extern void cpu_report(void);
|
extern void cpu_report(void);
|
||||||
|
203
arch/mips/include/asm/cpu-type.h
Normal file
203
arch/mips/include/asm/cpu-type.h
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
/*
|
||||||
|
* This file is subject to the terms and conditions of the GNU General Public
|
||||||
|
* License. See the file "COPYING" in the main directory of this archive
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2003, 2004 Ralf Baechle
|
||||||
|
* Copyright (C) 2004 Maciej W. Rozycki
|
||||||
|
*/
|
||||||
|
#ifndef __ASM_CPU_TYPE_H
|
||||||
|
#define __ASM_CPU_TYPE_H
|
||||||
|
|
||||||
|
#include <linux/smp.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
|
static inline int __pure __get_cpu_type(const int cpu_type)
|
||||||
|
{
|
||||||
|
switch (cpu_type) {
|
||||||
|
#if defined(CONFIG_SYS_HAS_CPU_LOONGSON2E) || \
|
||||||
|
defined(CONFIG_SYS_HAS_CPU_LOONGSON2F)
|
||||||
|
case CPU_LOONGSON2:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_LOONGSON1B
|
||||||
|
case CPU_LOONGSON1:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_MIPS32_R1
|
||||||
|
case CPU_4KC:
|
||||||
|
case CPU_ALCHEMY:
|
||||||
|
case CPU_BMIPS3300:
|
||||||
|
case CPU_BMIPS4350:
|
||||||
|
case CPU_PR4450:
|
||||||
|
case CPU_BMIPS32:
|
||||||
|
case CPU_JZRISC:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_SYS_HAS_CPU_MIPS32_R1) || \
|
||||||
|
defined(CONFIG_SYS_HAS_CPU_MIPS32_R2)
|
||||||
|
case CPU_4KEC:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_MIPS32_R2
|
||||||
|
case CPU_4KSC:
|
||||||
|
case CPU_24K:
|
||||||
|
case CPU_34K:
|
||||||
|
case CPU_1004K:
|
||||||
|
case CPU_74K:
|
||||||
|
case CPU_M14KC:
|
||||||
|
case CPU_M14KEC:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_MIPS64_R1
|
||||||
|
case CPU_5KC:
|
||||||
|
case CPU_5KE:
|
||||||
|
case CPU_20KC:
|
||||||
|
case CPU_25KF:
|
||||||
|
case CPU_SB1:
|
||||||
|
case CPU_SB1A:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_MIPS64_R2
|
||||||
|
/*
|
||||||
|
* All MIPS64 R2 processors have their own special symbols. That is,
|
||||||
|
* there currently is no pure R2 core
|
||||||
|
*/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_R3000
|
||||||
|
case CPU_R2000:
|
||||||
|
case CPU_R3000:
|
||||||
|
case CPU_R3000A:
|
||||||
|
case CPU_R3041:
|
||||||
|
case CPU_R3051:
|
||||||
|
case CPU_R3052:
|
||||||
|
case CPU_R3081:
|
||||||
|
case CPU_R3081E:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_TX39XX
|
||||||
|
case CPU_TX3912:
|
||||||
|
case CPU_TX3922:
|
||||||
|
case CPU_TX3927:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_VR41XX
|
||||||
|
case CPU_VR41XX:
|
||||||
|
case CPU_VR4111:
|
||||||
|
case CPU_VR4121:
|
||||||
|
case CPU_VR4122:
|
||||||
|
case CPU_VR4131:
|
||||||
|
case CPU_VR4133:
|
||||||
|
case CPU_VR4181:
|
||||||
|
case CPU_VR4181A:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_R4300
|
||||||
|
case CPU_R4300:
|
||||||
|
case CPU_R4310:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_R4X00
|
||||||
|
case CPU_R4000PC:
|
||||||
|
case CPU_R4000SC:
|
||||||
|
case CPU_R4000MC:
|
||||||
|
case CPU_R4200:
|
||||||
|
case CPU_R4400PC:
|
||||||
|
case CPU_R4400SC:
|
||||||
|
case CPU_R4400MC:
|
||||||
|
case CPU_R4600:
|
||||||
|
case CPU_R4700:
|
||||||
|
case CPU_R4640:
|
||||||
|
case CPU_R4650:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_TX49XX
|
||||||
|
case CPU_TX49XX:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_R5000
|
||||||
|
case CPU_R5000:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_R5432
|
||||||
|
case CPU_R5432:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_R5500
|
||||||
|
case CPU_R5500:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_R6000
|
||||||
|
case CPU_R6000:
|
||||||
|
case CPU_R6000A:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_NEVADA
|
||||||
|
case CPU_NEVADA:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_R8000
|
||||||
|
case CPU_R8000:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_R10000
|
||||||
|
case CPU_R10000:
|
||||||
|
case CPU_R12000:
|
||||||
|
case CPU_R14000:
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_RM7000
|
||||||
|
case CPU_RM7000:
|
||||||
|
case CPU_SR71000:
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_RM9000
|
||||||
|
case CPU_RM9000:
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_SB1
|
||||||
|
case CPU_SB1:
|
||||||
|
case CPU_SB1A:
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_CAVIUM_OCTEON
|
||||||
|
case CPU_CAVIUM_OCTEON:
|
||||||
|
case CPU_CAVIUM_OCTEON_PLUS:
|
||||||
|
case CPU_CAVIUM_OCTEON2:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_BMIPS4380
|
||||||
|
case CPU_BMIPS4380:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_BMIPS5000
|
||||||
|
case CPU_BMIPS5000:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_XLP
|
||||||
|
case CPU_XLP:
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_HAS_CPU_XLR
|
||||||
|
case CPU_XLR:
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
unreachable();
|
||||||
|
}
|
||||||
|
|
||||||
|
return cpu_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int __pure current_cpu_type(void)
|
||||||
|
{
|
||||||
|
const int cpu_type = current_cpu_data.cputype;
|
||||||
|
|
||||||
|
return __get_cpu_type(cpu_type);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int __pure boot_cpu_type(void)
|
||||||
|
{
|
||||||
|
const int cpu_type = cpu_data[0].cputype;
|
||||||
|
|
||||||
|
return __get_cpu_type(cpu_type);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* __ASM_CPU_TYPE_H */
|
@ -3,15 +3,14 @@
|
|||||||
* various MIPS cpu types.
|
* various MIPS cpu types.
|
||||||
*
|
*
|
||||||
* Copyright (C) 1996 David S. Miller (davem@davemloft.net)
|
* Copyright (C) 1996 David S. Miller (davem@davemloft.net)
|
||||||
* Copyright (C) 2004 Maciej W. Rozycki
|
* Copyright (C) 2004, 2013 Maciej W. Rozycki
|
||||||
*/
|
*/
|
||||||
#ifndef _ASM_CPU_H
|
#ifndef _ASM_CPU_H
|
||||||
#define _ASM_CPU_H
|
#define _ASM_CPU_H
|
||||||
|
|
||||||
/* Assigned Company values for bits 23:16 of the PRId Register
|
/*
|
||||||
(CP0 register 15, select 0). As of the MIPS32 and MIPS64 specs from
|
As of the MIPS32 and MIPS64 specs from MTI, the PRId register (CP0
|
||||||
MTI, the PRId register is defined in this (backwards compatible)
|
register 15, select 0) is defined in this (backwards compatible) way:
|
||||||
way:
|
|
||||||
|
|
||||||
+----------------+----------------+----------------+----------------+
|
+----------------+----------------+----------------+----------------+
|
||||||
| Company Options| Company ID | Processor ID | Revision |
|
| Company Options| Company ID | Processor ID | Revision |
|
||||||
@ -23,6 +22,14 @@
|
|||||||
spec.
|
spec.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define PRID_OPT_MASK 0xff000000
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Assigned Company values for bits 23:16 of the PRId register.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PRID_COMP_MASK 0xff0000
|
||||||
|
|
||||||
#define PRID_COMP_LEGACY 0x000000
|
#define PRID_COMP_LEGACY 0x000000
|
||||||
#define PRID_COMP_MIPS 0x010000
|
#define PRID_COMP_MIPS 0x010000
|
||||||
#define PRID_COMP_BROADCOM 0x020000
|
#define PRID_COMP_BROADCOM 0x020000
|
||||||
@ -38,10 +45,17 @@
|
|||||||
#define PRID_COMP_INGENIC 0xd00000
|
#define PRID_COMP_INGENIC 0xd00000
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Assigned values for the product ID register. In order to detect a
|
* Assigned Processor ID (implementation) values for bits 15:8 of the PRId
|
||||||
* certain CPU type exactly eventually additional registers may need to
|
* register. In order to detect a certain CPU type exactly eventually
|
||||||
* be examined. These are valid when 23:16 == PRID_COMP_LEGACY
|
* additional registers may need to be examined.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define PRID_IMP_MASK 0xff00
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These are valid when 23:16 == PRID_COMP_LEGACY
|
||||||
|
*/
|
||||||
|
|
||||||
#define PRID_IMP_R2000 0x0100
|
#define PRID_IMP_R2000 0x0100
|
||||||
#define PRID_IMP_AU1_REV1 0x0100
|
#define PRID_IMP_AU1_REV1 0x0100
|
||||||
#define PRID_IMP_AU1_REV2 0x0200
|
#define PRID_IMP_AU1_REV2 0x0200
|
||||||
@ -182,11 +196,15 @@
|
|||||||
#define PRID_IMP_NETLOGIC_XLP2XX 0x1200
|
#define PRID_IMP_NETLOGIC_XLP2XX 0x1200
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Definitions for 7:0 on legacy processors
|
* Particular Revision values for bits 7:0 of the PRId register.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PRID_REV_MASK 0x00ff
|
#define PRID_REV_MASK 0x00ff
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definitions for 7:0 on legacy processors
|
||||||
|
*/
|
||||||
|
|
||||||
#define PRID_REV_TX4927 0x0022
|
#define PRID_REV_TX4927 0x0022
|
||||||
#define PRID_REV_TX4937 0x0030
|
#define PRID_REV_TX4937 0x0030
|
||||||
#define PRID_REV_R4400 0x0040
|
#define PRID_REV_R4400 0x0040
|
||||||
@ -227,6 +245,8 @@
|
|||||||
* 31 16 15 8 7 0
|
* 31 16 15 8 7 0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define FPIR_IMP_MASK 0xff00
|
||||||
|
|
||||||
#define FPIR_IMP_NONE 0x0000
|
#define FPIR_IMP_NONE 0x0000
|
||||||
|
|
||||||
enum cpu_type_enum {
|
enum cpu_type_enum {
|
||||||
|
@ -43,6 +43,8 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
|
|
||||||
|
#include <asm/cpu.h>
|
||||||
|
|
||||||
/* cpu pipeline flush */
|
/* cpu pipeline flush */
|
||||||
void static inline au_sync(void)
|
void static inline au_sync(void)
|
||||||
{
|
{
|
||||||
@ -140,7 +142,7 @@ static inline int au1xxx_cpu_needs_config_od(void)
|
|||||||
|
|
||||||
static inline int alchemy_get_cputype(void)
|
static inline int alchemy_get_cputype(void)
|
||||||
{
|
{
|
||||||
switch (read_c0_prid() & 0xffff0000) {
|
switch (read_c0_prid() & (PRID_OPT_MASK | PRID_COMP_MASK)) {
|
||||||
case 0x00030000:
|
case 0x00030000:
|
||||||
return ALCHEMY_CPU_AU1000;
|
return ALCHEMY_CPU_AU1000;
|
||||||
break;
|
break;
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
#ifndef __ASM_MACH_IP22_CPU_FEATURE_OVERRIDES_H
|
#ifndef __ASM_MACH_IP22_CPU_FEATURE_OVERRIDES_H
|
||||||
#define __ASM_MACH_IP22_CPU_FEATURE_OVERRIDES_H
|
#define __ASM_MACH_IP22_CPU_FEATURE_OVERRIDES_H
|
||||||
|
|
||||||
|
#include <asm/cpu.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* IP22 with a variety of processors so we can't use defaults for everything.
|
* IP22 with a variety of processors so we can't use defaults for everything.
|
||||||
*/
|
*/
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
#ifndef __ASM_MACH_IP27_CPU_FEATURE_OVERRIDES_H
|
#ifndef __ASM_MACH_IP27_CPU_FEATURE_OVERRIDES_H
|
||||||
#define __ASM_MACH_IP27_CPU_FEATURE_OVERRIDES_H
|
#define __ASM_MACH_IP27_CPU_FEATURE_OVERRIDES_H
|
||||||
|
|
||||||
|
#include <asm/cpu.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* IP27 only comes with R10000 family processors all using the same config
|
* IP27 only comes with R10000 family processors all using the same config
|
||||||
*/
|
*/
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
#ifndef __ASM_MACH_IP28_CPU_FEATURE_OVERRIDES_H
|
#ifndef __ASM_MACH_IP28_CPU_FEATURE_OVERRIDES_H
|
||||||
#define __ASM_MACH_IP28_CPU_FEATURE_OVERRIDES_H
|
#define __ASM_MACH_IP28_CPU_FEATURE_OVERRIDES_H
|
||||||
|
|
||||||
|
#include <asm/cpu.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* IP28 only comes with R10000 family processors all using the same config
|
* IP28 only comes with R10000 family processors all using the same config
|
||||||
*/
|
*/
|
||||||
|
@ -603,6 +603,13 @@
|
|||||||
#define MIPS_CONF4_MMUEXTDEF (_ULCAST_(3) << 14)
|
#define MIPS_CONF4_MMUEXTDEF (_ULCAST_(3) << 14)
|
||||||
#define MIPS_CONF4_MMUEXTDEF_MMUSIZEEXT (_ULCAST_(1) << 14)
|
#define MIPS_CONF4_MMUEXTDEF_MMUSIZEEXT (_ULCAST_(1) << 14)
|
||||||
|
|
||||||
|
#define MIPS_CONF5_NF (_ULCAST_(1) << 0)
|
||||||
|
#define MIPS_CONF5_UFR (_ULCAST_(1) << 2)
|
||||||
|
#define MIPS_CONF5_MSAEN (_ULCAST_(1) << 27)
|
||||||
|
#define MIPS_CONF5_EVA (_ULCAST_(1) << 28)
|
||||||
|
#define MIPS_CONF5_CV (_ULCAST_(1) << 29)
|
||||||
|
#define MIPS_CONF5_K (_ULCAST_(1) << 30)
|
||||||
|
|
||||||
#define MIPS_CONF6_SYND (_ULCAST_(1) << 13)
|
#define MIPS_CONF6_SYND (_ULCAST_(1) << 13)
|
||||||
|
|
||||||
#define MIPS_CONF7_WII (_ULCAST_(1) << 31)
|
#define MIPS_CONF7_WII (_ULCAST_(1) << 31)
|
||||||
|
@ -83,6 +83,18 @@ static inline void pcibios_penalize_isa_irq(int irq, int active)
|
|||||||
extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
|
extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
|
||||||
enum pci_mmap_state mmap_state, int write_combine);
|
enum pci_mmap_state mmap_state, int write_combine);
|
||||||
|
|
||||||
|
#define HAVE_ARCH_PCI_RESOURCE_TO_USER
|
||||||
|
|
||||||
|
static inline void pci_resource_to_user(const struct pci_dev *dev, int bar,
|
||||||
|
const struct resource *rsrc, resource_size_t *start,
|
||||||
|
resource_size_t *end)
|
||||||
|
{
|
||||||
|
phys_t size = resource_size(rsrc);
|
||||||
|
|
||||||
|
*start = fixup_bigphys_addr(rsrc->start, size);
|
||||||
|
*end = rsrc->start + size;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Dynamic DMA mapping stuff.
|
* Dynamic DMA mapping stuff.
|
||||||
* MIPS has everything mapped statically.
|
* MIPS has everything mapped statically.
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
|
#include <asm/cpu-features.h>
|
||||||
#include <asm/mipsregs.h>
|
#include <asm/mipsregs.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the clock rate of the i8253 PIT. A MIPS system may not have
|
* This is the clock rate of the i8253 PIT. A MIPS system may not have
|
||||||
@ -33,9 +35,38 @@
|
|||||||
|
|
||||||
typedef unsigned int cycles_t;
|
typedef unsigned int cycles_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* On R4000/R4400 before version 5.0 an erratum exists such that if the
|
||||||
|
* cycle counter is read in the exact moment that it is matching the
|
||||||
|
* compare register, no interrupt will be generated.
|
||||||
|
*
|
||||||
|
* There is a suggested workaround and also the erratum can't strike if
|
||||||
|
* the compare interrupt isn't being used as the clock source device.
|
||||||
|
* However for now the implementaton of this function doesn't get these
|
||||||
|
* fine details right.
|
||||||
|
*/
|
||||||
static inline cycles_t get_cycles(void)
|
static inline cycles_t get_cycles(void)
|
||||||
{
|
{
|
||||||
return 0;
|
switch (boot_cpu_type()) {
|
||||||
|
case CPU_R4400PC:
|
||||||
|
case CPU_R4400SC:
|
||||||
|
case CPU_R4400MC:
|
||||||
|
if ((read_c0_prid() & 0xff) >= 0x0050)
|
||||||
|
return read_c0_count();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CPU_R4000PC:
|
||||||
|
case CPU_R4000SC:
|
||||||
|
case CPU_R4000MC:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (cpu_has_counter)
|
||||||
|
return read_c0_count();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0; /* no usable counter */
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#ifndef _ASM_VGA_H
|
#ifndef _ASM_VGA_H
|
||||||
#define _ASM_VGA_H
|
#define _ASM_VGA_H
|
||||||
|
|
||||||
|
#include <asm/addrspace.h>
|
||||||
#include <asm/byteorder.h>
|
#include <asm/byteorder.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -13,7 +14,7 @@
|
|||||||
* access the videoram directly without any black magic.
|
* access the videoram directly without any black magic.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define VGA_MAP_MEM(x, s) (0xb0000000L + (unsigned long)(x))
|
#define VGA_MAP_MEM(x, s) CKSEG1ADDR(0x10000000L + (unsigned long)(x))
|
||||||
|
|
||||||
#define vga_readb(x) (*(x))
|
#define vga_readb(x) (*(x))
|
||||||
#define vga_writeb(x, y) (*(y) = (x))
|
#define vga_writeb(x, y) (*(y) = (x))
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include <asm/bugs.h>
|
#include <asm/bugs.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
#include <asm/fpu.h>
|
#include <asm/fpu.h>
|
||||||
#include <asm/mipsregs.h>
|
#include <asm/mipsregs.h>
|
||||||
#include <asm/watch.h>
|
#include <asm/watch.h>
|
||||||
@ -55,7 +56,7 @@ static inline void check_errata(void)
|
|||||||
{
|
{
|
||||||
struct cpuinfo_mips *c = ¤t_cpu_data;
|
struct cpuinfo_mips *c = ¤t_cpu_data;
|
||||||
|
|
||||||
switch (c->cputype) {
|
switch (current_cpu_type()) {
|
||||||
case CPU_34K:
|
case CPU_34K:
|
||||||
/*
|
/*
|
||||||
* Erratum "RPS May Cause Incorrect Instruction Execution"
|
* Erratum "RPS May Cause Incorrect Instruction Execution"
|
||||||
@ -122,7 +123,7 @@ static inline unsigned long cpu_get_fpu_id(void)
|
|||||||
*/
|
*/
|
||||||
static inline int __cpu_has_fpu(void)
|
static inline int __cpu_has_fpu(void)
|
||||||
{
|
{
|
||||||
return ((cpu_get_fpu_id() & 0xff00) != FPIR_IMP_NONE);
|
return ((cpu_get_fpu_id() & FPIR_IMP_MASK) != FPIR_IMP_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void cpu_probe_vmbits(struct cpuinfo_mips *c)
|
static inline void cpu_probe_vmbits(struct cpuinfo_mips *c)
|
||||||
@ -290,6 +291,17 @@ static inline unsigned int decode_config4(struct cpuinfo_mips *c)
|
|||||||
return config4 & MIPS_CONF_M;
|
return config4 & MIPS_CONF_M;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline unsigned int decode_config5(struct cpuinfo_mips *c)
|
||||||
|
{
|
||||||
|
unsigned int config5;
|
||||||
|
|
||||||
|
config5 = read_c0_config5();
|
||||||
|
config5 &= ~MIPS_CONF5_UFR;
|
||||||
|
write_c0_config5(config5);
|
||||||
|
|
||||||
|
return config5 & MIPS_CONF_M;
|
||||||
|
}
|
||||||
|
|
||||||
static void decode_configs(struct cpuinfo_mips *c)
|
static void decode_configs(struct cpuinfo_mips *c)
|
||||||
{
|
{
|
||||||
int ok;
|
int ok;
|
||||||
@ -310,6 +322,8 @@ static void decode_configs(struct cpuinfo_mips *c)
|
|||||||
ok = decode_config3(c);
|
ok = decode_config3(c);
|
||||||
if (ok)
|
if (ok)
|
||||||
ok = decode_config4(c);
|
ok = decode_config4(c);
|
||||||
|
if (ok)
|
||||||
|
ok = decode_config5(c);
|
||||||
|
|
||||||
mips_probe_watch_registers(c);
|
mips_probe_watch_registers(c);
|
||||||
|
|
||||||
@ -322,7 +336,7 @@ static void decode_configs(struct cpuinfo_mips *c)
|
|||||||
|
|
||||||
static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
|
static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
|
||||||
{
|
{
|
||||||
switch (c->processor_id & 0xff00) {
|
switch (c->processor_id & PRID_IMP_MASK) {
|
||||||
case PRID_IMP_R2000:
|
case PRID_IMP_R2000:
|
||||||
c->cputype = CPU_R2000;
|
c->cputype = CPU_R2000;
|
||||||
__cpu_name[cpu] = "R2000";
|
__cpu_name[cpu] = "R2000";
|
||||||
@ -333,7 +347,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
c->tlbsize = 64;
|
c->tlbsize = 64;
|
||||||
break;
|
break;
|
||||||
case PRID_IMP_R3000:
|
case PRID_IMP_R3000:
|
||||||
if ((c->processor_id & 0xff) == PRID_REV_R3000A) {
|
if ((c->processor_id & PRID_REV_MASK) == PRID_REV_R3000A) {
|
||||||
if (cpu_has_confreg()) {
|
if (cpu_has_confreg()) {
|
||||||
c->cputype = CPU_R3081E;
|
c->cputype = CPU_R3081E;
|
||||||
__cpu_name[cpu] = "R3081";
|
__cpu_name[cpu] = "R3081";
|
||||||
@ -353,7 +367,8 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
break;
|
break;
|
||||||
case PRID_IMP_R4000:
|
case PRID_IMP_R4000:
|
||||||
if (read_c0_config() & CONF_SC) {
|
if (read_c0_config() & CONF_SC) {
|
||||||
if ((c->processor_id & 0xff) >= PRID_REV_R4400) {
|
if ((c->processor_id & PRID_REV_MASK) >=
|
||||||
|
PRID_REV_R4400) {
|
||||||
c->cputype = CPU_R4400PC;
|
c->cputype = CPU_R4400PC;
|
||||||
__cpu_name[cpu] = "R4400PC";
|
__cpu_name[cpu] = "R4400PC";
|
||||||
} else {
|
} else {
|
||||||
@ -361,7 +376,8 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
__cpu_name[cpu] = "R4000PC";
|
__cpu_name[cpu] = "R4000PC";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((c->processor_id & 0xff) >= PRID_REV_R4400) {
|
if ((c->processor_id & PRID_REV_MASK) >=
|
||||||
|
PRID_REV_R4400) {
|
||||||
c->cputype = CPU_R4400SC;
|
c->cputype = CPU_R4400SC;
|
||||||
__cpu_name[cpu] = "R4400SC";
|
__cpu_name[cpu] = "R4400SC";
|
||||||
} else {
|
} else {
|
||||||
@ -454,7 +470,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
__cpu_name[cpu] = "TX3927";
|
__cpu_name[cpu] = "TX3927";
|
||||||
c->tlbsize = 64;
|
c->tlbsize = 64;
|
||||||
} else {
|
} else {
|
||||||
switch (c->processor_id & 0xff) {
|
switch (c->processor_id & PRID_REV_MASK) {
|
||||||
case PRID_REV_TX3912:
|
case PRID_REV_TX3912:
|
||||||
c->cputype = CPU_TX3912;
|
c->cputype = CPU_TX3912;
|
||||||
__cpu_name[cpu] = "TX3912";
|
__cpu_name[cpu] = "TX3912";
|
||||||
@ -640,7 +656,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)
|
static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)
|
||||||
{
|
{
|
||||||
decode_configs(c);
|
decode_configs(c);
|
||||||
switch (c->processor_id & 0xff00) {
|
switch (c->processor_id & PRID_IMP_MASK) {
|
||||||
case PRID_IMP_4KC:
|
case PRID_IMP_4KC:
|
||||||
c->cputype = CPU_4KC;
|
c->cputype = CPU_4KC;
|
||||||
__cpu_name[cpu] = "MIPS 4Kc";
|
__cpu_name[cpu] = "MIPS 4Kc";
|
||||||
@ -711,7 +727,7 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
static inline void cpu_probe_alchemy(struct cpuinfo_mips *c, unsigned int cpu)
|
static inline void cpu_probe_alchemy(struct cpuinfo_mips *c, unsigned int cpu)
|
||||||
{
|
{
|
||||||
decode_configs(c);
|
decode_configs(c);
|
||||||
switch (c->processor_id & 0xff00) {
|
switch (c->processor_id & PRID_IMP_MASK) {
|
||||||
case PRID_IMP_AU1_REV1:
|
case PRID_IMP_AU1_REV1:
|
||||||
case PRID_IMP_AU1_REV2:
|
case PRID_IMP_AU1_REV2:
|
||||||
c->cputype = CPU_ALCHEMY;
|
c->cputype = CPU_ALCHEMY;
|
||||||
@ -730,7 +746,7 @@ static inline void cpu_probe_alchemy(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
__cpu_name[cpu] = "Au1200";
|
__cpu_name[cpu] = "Au1200";
|
||||||
if ((c->processor_id & 0xff) == 2)
|
if ((c->processor_id & PRID_REV_MASK) == 2)
|
||||||
__cpu_name[cpu] = "Au1250";
|
__cpu_name[cpu] = "Au1250";
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
@ -748,12 +764,12 @@ static inline void cpu_probe_sibyte(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
{
|
{
|
||||||
decode_configs(c);
|
decode_configs(c);
|
||||||
|
|
||||||
switch (c->processor_id & 0xff00) {
|
switch (c->processor_id & PRID_IMP_MASK) {
|
||||||
case PRID_IMP_SB1:
|
case PRID_IMP_SB1:
|
||||||
c->cputype = CPU_SB1;
|
c->cputype = CPU_SB1;
|
||||||
__cpu_name[cpu] = "SiByte SB1";
|
__cpu_name[cpu] = "SiByte SB1";
|
||||||
/* FPU in pass1 is known to have issues. */
|
/* FPU in pass1 is known to have issues. */
|
||||||
if ((c->processor_id & 0xff) < 0x02)
|
if ((c->processor_id & PRID_REV_MASK) < 0x02)
|
||||||
c->options &= ~(MIPS_CPU_FPU | MIPS_CPU_32FPR);
|
c->options &= ~(MIPS_CPU_FPU | MIPS_CPU_32FPR);
|
||||||
break;
|
break;
|
||||||
case PRID_IMP_SB1A:
|
case PRID_IMP_SB1A:
|
||||||
@ -766,7 +782,7 @@ static inline void cpu_probe_sibyte(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
static inline void cpu_probe_sandcraft(struct cpuinfo_mips *c, unsigned int cpu)
|
static inline void cpu_probe_sandcraft(struct cpuinfo_mips *c, unsigned int cpu)
|
||||||
{
|
{
|
||||||
decode_configs(c);
|
decode_configs(c);
|
||||||
switch (c->processor_id & 0xff00) {
|
switch (c->processor_id & PRID_IMP_MASK) {
|
||||||
case PRID_IMP_SR71000:
|
case PRID_IMP_SR71000:
|
||||||
c->cputype = CPU_SR71000;
|
c->cputype = CPU_SR71000;
|
||||||
__cpu_name[cpu] = "Sandcraft SR71000";
|
__cpu_name[cpu] = "Sandcraft SR71000";
|
||||||
@ -779,7 +795,7 @@ static inline void cpu_probe_sandcraft(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
static inline void cpu_probe_nxp(struct cpuinfo_mips *c, unsigned int cpu)
|
static inline void cpu_probe_nxp(struct cpuinfo_mips *c, unsigned int cpu)
|
||||||
{
|
{
|
||||||
decode_configs(c);
|
decode_configs(c);
|
||||||
switch (c->processor_id & 0xff00) {
|
switch (c->processor_id & PRID_IMP_MASK) {
|
||||||
case PRID_IMP_PR4450:
|
case PRID_IMP_PR4450:
|
||||||
c->cputype = CPU_PR4450;
|
c->cputype = CPU_PR4450;
|
||||||
__cpu_name[cpu] = "Philips PR4450";
|
__cpu_name[cpu] = "Philips PR4450";
|
||||||
@ -791,7 +807,7 @@ static inline void cpu_probe_nxp(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
static inline void cpu_probe_broadcom(struct cpuinfo_mips *c, unsigned int cpu)
|
static inline void cpu_probe_broadcom(struct cpuinfo_mips *c, unsigned int cpu)
|
||||||
{
|
{
|
||||||
decode_configs(c);
|
decode_configs(c);
|
||||||
switch (c->processor_id & 0xff00) {
|
switch (c->processor_id & PRID_IMP_MASK) {
|
||||||
case PRID_IMP_BMIPS32_REV4:
|
case PRID_IMP_BMIPS32_REV4:
|
||||||
case PRID_IMP_BMIPS32_REV8:
|
case PRID_IMP_BMIPS32_REV8:
|
||||||
c->cputype = CPU_BMIPS32;
|
c->cputype = CPU_BMIPS32;
|
||||||
@ -806,7 +822,7 @@ static inline void cpu_probe_broadcom(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
set_elf_platform(cpu, "bmips3300");
|
set_elf_platform(cpu, "bmips3300");
|
||||||
break;
|
break;
|
||||||
case PRID_IMP_BMIPS43XX: {
|
case PRID_IMP_BMIPS43XX: {
|
||||||
int rev = c->processor_id & 0xff;
|
int rev = c->processor_id & PRID_REV_MASK;
|
||||||
|
|
||||||
if (rev >= PRID_REV_BMIPS4380_LO &&
|
if (rev >= PRID_REV_BMIPS4380_LO &&
|
||||||
rev <= PRID_REV_BMIPS4380_HI) {
|
rev <= PRID_REV_BMIPS4380_HI) {
|
||||||
@ -832,7 +848,7 @@ static inline void cpu_probe_broadcom(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
static inline void cpu_probe_cavium(struct cpuinfo_mips *c, unsigned int cpu)
|
static inline void cpu_probe_cavium(struct cpuinfo_mips *c, unsigned int cpu)
|
||||||
{
|
{
|
||||||
decode_configs(c);
|
decode_configs(c);
|
||||||
switch (c->processor_id & 0xff00) {
|
switch (c->processor_id & PRID_IMP_MASK) {
|
||||||
case PRID_IMP_CAVIUM_CN38XX:
|
case PRID_IMP_CAVIUM_CN38XX:
|
||||||
case PRID_IMP_CAVIUM_CN31XX:
|
case PRID_IMP_CAVIUM_CN31XX:
|
||||||
case PRID_IMP_CAVIUM_CN30XX:
|
case PRID_IMP_CAVIUM_CN30XX:
|
||||||
@ -875,7 +891,7 @@ static inline void cpu_probe_ingenic(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
decode_configs(c);
|
decode_configs(c);
|
||||||
/* JZRISC does not implement the CP0 counter. */
|
/* JZRISC does not implement the CP0 counter. */
|
||||||
c->options &= ~MIPS_CPU_COUNTER;
|
c->options &= ~MIPS_CPU_COUNTER;
|
||||||
switch (c->processor_id & 0xff00) {
|
switch (c->processor_id & PRID_IMP_MASK) {
|
||||||
case PRID_IMP_JZRISC:
|
case PRID_IMP_JZRISC:
|
||||||
c->cputype = CPU_JZRISC;
|
c->cputype = CPU_JZRISC;
|
||||||
__cpu_name[cpu] = "Ingenic JZRISC";
|
__cpu_name[cpu] = "Ingenic JZRISC";
|
||||||
@ -890,7 +906,7 @@ static inline void cpu_probe_netlogic(struct cpuinfo_mips *c, int cpu)
|
|||||||
{
|
{
|
||||||
decode_configs(c);
|
decode_configs(c);
|
||||||
|
|
||||||
if ((c->processor_id & 0xff00) == PRID_IMP_NETLOGIC_AU13XX) {
|
if ((c->processor_id & PRID_IMP_MASK) == PRID_IMP_NETLOGIC_AU13XX) {
|
||||||
c->cputype = CPU_ALCHEMY;
|
c->cputype = CPU_ALCHEMY;
|
||||||
__cpu_name[cpu] = "Au1300";
|
__cpu_name[cpu] = "Au1300";
|
||||||
/* following stuff is not for Alchemy */
|
/* following stuff is not for Alchemy */
|
||||||
@ -905,7 +921,7 @@ static inline void cpu_probe_netlogic(struct cpuinfo_mips *c, int cpu)
|
|||||||
MIPS_CPU_EJTAG |
|
MIPS_CPU_EJTAG |
|
||||||
MIPS_CPU_LLSC);
|
MIPS_CPU_LLSC);
|
||||||
|
|
||||||
switch (c->processor_id & 0xff00) {
|
switch (c->processor_id & PRID_IMP_MASK) {
|
||||||
case PRID_IMP_NETLOGIC_XLP2XX:
|
case PRID_IMP_NETLOGIC_XLP2XX:
|
||||||
c->cputype = CPU_XLP;
|
c->cputype = CPU_XLP;
|
||||||
__cpu_name[cpu] = "Broadcom XLPII";
|
__cpu_name[cpu] = "Broadcom XLPII";
|
||||||
@ -984,7 +1000,7 @@ void cpu_probe(void)
|
|||||||
c->cputype = CPU_UNKNOWN;
|
c->cputype = CPU_UNKNOWN;
|
||||||
|
|
||||||
c->processor_id = read_c0_prid();
|
c->processor_id = read_c0_prid();
|
||||||
switch (c->processor_id & 0xff0000) {
|
switch (c->processor_id & PRID_COMP_MASK) {
|
||||||
case PRID_COMP_LEGACY:
|
case PRID_COMP_LEGACY:
|
||||||
cpu_probe_legacy(c, cpu);
|
cpu_probe_legacy(c, cpu);
|
||||||
break;
|
break;
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
#include <asm/cpu-info.h>
|
#include <asm/cpu-info.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
#include <asm/idle.h>
|
#include <asm/idle.h>
|
||||||
#include <asm/mipsregs.h>
|
#include <asm/mipsregs.h>
|
||||||
|
|
||||||
@ -136,7 +137,7 @@ void __init check_wait(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (c->cputype) {
|
switch (current_cpu_type()) {
|
||||||
case CPU_R3081:
|
case CPU_R3081:
|
||||||
case CPU_R3081E:
|
case CPU_R3081E:
|
||||||
cpu_wait = r3081_wait;
|
cpu_wait = r3081_wait;
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
|
|
||||||
#include <asm/cpu-features.h>
|
#include <asm/cpu-features.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
#include <asm/div64.h>
|
#include <asm/div64.h>
|
||||||
#include <asm/smtc_ipi.h>
|
#include <asm/smtc_ipi.h>
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#include <asm/break.h>
|
#include <asm/break.h>
|
||||||
#include <asm/cop2.h>
|
#include <asm/cop2.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
#include <asm/dsp.h>
|
#include <asm/dsp.h>
|
||||||
#include <asm/fpu.h>
|
#include <asm/fpu.h>
|
||||||
#include <asm/fpu_emulator.h>
|
#include <asm/fpu_emulator.h>
|
||||||
@ -622,7 +623,7 @@ static int simulate_rdhwr(struct pt_regs *regs, int rd, int rt)
|
|||||||
regs->regs[rt] = read_c0_count();
|
regs->regs[rt] = read_c0_count();
|
||||||
return 0;
|
return 0;
|
||||||
case 3: /* Count register resolution */
|
case 3: /* Count register resolution */
|
||||||
switch (current_cpu_data.cputype) {
|
switch (current_cpu_type()) {
|
||||||
case CPU_20KC:
|
case CPU_20KC:
|
||||||
case CPU_25KF:
|
case CPU_25KF:
|
||||||
regs->regs[rt] = 1;
|
regs->regs[rt] = 1;
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <asm/bootinfo.h>
|
#include <asm/bootinfo.h>
|
||||||
#include <asm/cacheops.h>
|
#include <asm/cacheops.h>
|
||||||
#include <asm/cpu-features.h>
|
#include <asm/cpu-features.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/r4kcache.h>
|
#include <asm/r4kcache.h>
|
||||||
@ -186,9 +187,10 @@ static void probe_octeon(void)
|
|||||||
unsigned long dcache_size;
|
unsigned long dcache_size;
|
||||||
unsigned int config1;
|
unsigned int config1;
|
||||||
struct cpuinfo_mips *c = ¤t_cpu_data;
|
struct cpuinfo_mips *c = ¤t_cpu_data;
|
||||||
|
int cputype = current_cpu_type();
|
||||||
|
|
||||||
config1 = read_c0_config1();
|
config1 = read_c0_config1();
|
||||||
switch (c->cputype) {
|
switch (cputype) {
|
||||||
case CPU_CAVIUM_OCTEON:
|
case CPU_CAVIUM_OCTEON:
|
||||||
case CPU_CAVIUM_OCTEON_PLUS:
|
case CPU_CAVIUM_OCTEON_PLUS:
|
||||||
c->icache.linesz = 2 << ((config1 >> 19) & 7);
|
c->icache.linesz = 2 << ((config1 >> 19) & 7);
|
||||||
@ -199,7 +201,7 @@ static void probe_octeon(void)
|
|||||||
c->icache.sets * c->icache.ways * c->icache.linesz;
|
c->icache.sets * c->icache.ways * c->icache.linesz;
|
||||||
c->icache.waybit = ffs(icache_size / c->icache.ways) - 1;
|
c->icache.waybit = ffs(icache_size / c->icache.ways) - 1;
|
||||||
c->dcache.linesz = 128;
|
c->dcache.linesz = 128;
|
||||||
if (c->cputype == CPU_CAVIUM_OCTEON_PLUS)
|
if (cputype == CPU_CAVIUM_OCTEON_PLUS)
|
||||||
c->dcache.sets = 2; /* CN5XXX has two Dcache sets */
|
c->dcache.sets = 2; /* CN5XXX has two Dcache sets */
|
||||||
else
|
else
|
||||||
c->dcache.sets = 1; /* CN3XXX has one Dcache set */
|
c->dcache.sets = 1; /* CN3XXX has one Dcache set */
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include <linux/highmem.h>
|
#include <linux/highmem.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
|
#include <linux/preempt.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
@ -24,6 +25,7 @@
|
|||||||
#include <asm/cacheops.h>
|
#include <asm/cacheops.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
#include <asm/cpu-features.h>
|
#include <asm/cpu-features.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
@ -601,6 +603,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
|||||||
/* Catch bad driver code */
|
/* Catch bad driver code */
|
||||||
BUG_ON(size == 0);
|
BUG_ON(size == 0);
|
||||||
|
|
||||||
|
preempt_disable();
|
||||||
if (cpu_has_inclusive_pcaches) {
|
if (cpu_has_inclusive_pcaches) {
|
||||||
if (size >= scache_size)
|
if (size >= scache_size)
|
||||||
r4k_blast_scache();
|
r4k_blast_scache();
|
||||||
@ -621,6 +624,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
|||||||
R4600_HIT_CACHEOP_WAR_IMPL;
|
R4600_HIT_CACHEOP_WAR_IMPL;
|
||||||
blast_dcache_range(addr, addr + size);
|
blast_dcache_range(addr, addr + size);
|
||||||
}
|
}
|
||||||
|
preempt_enable();
|
||||||
|
|
||||||
bc_wback_inv(addr, size);
|
bc_wback_inv(addr, size);
|
||||||
__sync();
|
__sync();
|
||||||
@ -631,6 +635,7 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
|
|||||||
/* Catch bad driver code */
|
/* Catch bad driver code */
|
||||||
BUG_ON(size == 0);
|
BUG_ON(size == 0);
|
||||||
|
|
||||||
|
preempt_disable();
|
||||||
if (cpu_has_inclusive_pcaches) {
|
if (cpu_has_inclusive_pcaches) {
|
||||||
if (size >= scache_size)
|
if (size >= scache_size)
|
||||||
r4k_blast_scache();
|
r4k_blast_scache();
|
||||||
@ -655,6 +660,7 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
|
|||||||
R4600_HIT_CACHEOP_WAR_IMPL;
|
R4600_HIT_CACHEOP_WAR_IMPL;
|
||||||
blast_inv_dcache_range(addr, addr + size);
|
blast_inv_dcache_range(addr, addr + size);
|
||||||
}
|
}
|
||||||
|
preempt_enable();
|
||||||
|
|
||||||
bc_inv(addr, size);
|
bc_inv(addr, size);
|
||||||
__sync();
|
__sync();
|
||||||
@ -780,20 +786,30 @@ static inline void rm7k_erratum31(void)
|
|||||||
|
|
||||||
static inline void alias_74k_erratum(struct cpuinfo_mips *c)
|
static inline void alias_74k_erratum(struct cpuinfo_mips *c)
|
||||||
{
|
{
|
||||||
|
unsigned int imp = c->processor_id & PRID_IMP_MASK;
|
||||||
|
unsigned int rev = c->processor_id & PRID_REV_MASK;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Early versions of the 74K do not update the cache tags on a
|
* Early versions of the 74K do not update the cache tags on a
|
||||||
* vtag miss/ptag hit which can occur in the case of KSEG0/KUSEG
|
* vtag miss/ptag hit which can occur in the case of KSEG0/KUSEG
|
||||||
* aliases. In this case it is better to treat the cache as always
|
* aliases. In this case it is better to treat the cache as always
|
||||||
* having aliases.
|
* having aliases.
|
||||||
*/
|
*/
|
||||||
if ((c->processor_id & 0xff) <= PRID_REV_ENCODE_332(2, 4, 0))
|
switch (imp) {
|
||||||
c->dcache.flags |= MIPS_CACHE_VTAG;
|
case PRID_IMP_74K:
|
||||||
if ((c->processor_id & 0xff) == PRID_REV_ENCODE_332(2, 4, 0))
|
if (rev <= PRID_REV_ENCODE_332(2, 4, 0))
|
||||||
write_c0_config6(read_c0_config6() | MIPS_CONF6_SYND);
|
c->dcache.flags |= MIPS_CACHE_VTAG;
|
||||||
if (((c->processor_id & 0xff00) == PRID_IMP_1074K) &&
|
if (rev == PRID_REV_ENCODE_332(2, 4, 0))
|
||||||
((c->processor_id & 0xff) <= PRID_REV_ENCODE_332(1, 1, 0))) {
|
write_c0_config6(read_c0_config6() | MIPS_CONF6_SYND);
|
||||||
c->dcache.flags |= MIPS_CACHE_VTAG;
|
break;
|
||||||
write_c0_config6(read_c0_config6() | MIPS_CONF6_SYND);
|
case PRID_IMP_1074K:
|
||||||
|
if (rev <= PRID_REV_ENCODE_332(1, 1, 0)) {
|
||||||
|
c->dcache.flags |= MIPS_CACHE_VTAG;
|
||||||
|
write_c0_config6(read_c0_config6() | MIPS_CONF6_SYND);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
BUG();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -809,7 +825,7 @@ static void probe_pcache(void)
|
|||||||
unsigned long config1;
|
unsigned long config1;
|
||||||
unsigned int lsize;
|
unsigned int lsize;
|
||||||
|
|
||||||
switch (c->cputype) {
|
switch (current_cpu_type()) {
|
||||||
case CPU_R4600: /* QED style two way caches? */
|
case CPU_R4600: /* QED style two way caches? */
|
||||||
case CPU_R4700:
|
case CPU_R4700:
|
||||||
case CPU_R5000:
|
case CPU_R5000:
|
||||||
@ -1025,7 +1041,8 @@ static void probe_pcache(void)
|
|||||||
* presumably no vendor is shipping his hardware in the "bad"
|
* presumably no vendor is shipping his hardware in the "bad"
|
||||||
* configuration.
|
* configuration.
|
||||||
*/
|
*/
|
||||||
if ((prid & 0xff00) == PRID_IMP_R4000 && (prid & 0xff) < 0x40 &&
|
if ((prid & PRID_IMP_MASK) == PRID_IMP_R4000 &&
|
||||||
|
(prid & PRID_REV_MASK) < PRID_REV_R4400 &&
|
||||||
!(config & CONF_SC) && c->icache.linesz != 16 &&
|
!(config & CONF_SC) && c->icache.linesz != 16 &&
|
||||||
PAGE_SIZE <= 0x8000)
|
PAGE_SIZE <= 0x8000)
|
||||||
panic("Improper R4000SC processor configuration detected");
|
panic("Improper R4000SC processor configuration detected");
|
||||||
@ -1045,7 +1062,7 @@ static void probe_pcache(void)
|
|||||||
* normally they'd suffer from aliases but magic in the hardware deals
|
* normally they'd suffer from aliases but magic in the hardware deals
|
||||||
* with that for us so we don't need to take care ourselves.
|
* with that for us so we don't need to take care ourselves.
|
||||||
*/
|
*/
|
||||||
switch (c->cputype) {
|
switch (current_cpu_type()) {
|
||||||
case CPU_20KC:
|
case CPU_20KC:
|
||||||
case CPU_25KF:
|
case CPU_25KF:
|
||||||
case CPU_SB1:
|
case CPU_SB1:
|
||||||
@ -1065,7 +1082,7 @@ static void probe_pcache(void)
|
|||||||
case CPU_34K:
|
case CPU_34K:
|
||||||
case CPU_74K:
|
case CPU_74K:
|
||||||
case CPU_1004K:
|
case CPU_1004K:
|
||||||
if (c->cputype == CPU_74K)
|
if (current_cpu_type() == CPU_74K)
|
||||||
alias_74k_erratum(c);
|
alias_74k_erratum(c);
|
||||||
if ((read_c0_config7() & (1 << 16))) {
|
if ((read_c0_config7() & (1 << 16))) {
|
||||||
/* effectively physically indexed dcache,
|
/* effectively physically indexed dcache,
|
||||||
@ -1078,7 +1095,7 @@ static void probe_pcache(void)
|
|||||||
c->dcache.flags |= MIPS_CACHE_ALIASES;
|
c->dcache.flags |= MIPS_CACHE_ALIASES;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (c->cputype) {
|
switch (current_cpu_type()) {
|
||||||
case CPU_20KC:
|
case CPU_20KC:
|
||||||
/*
|
/*
|
||||||
* Some older 20Kc chips doesn't have the 'VI' bit in
|
* Some older 20Kc chips doesn't have the 'VI' bit in
|
||||||
@ -1207,7 +1224,7 @@ static void setup_scache(void)
|
|||||||
* processors don't have a S-cache that would be relevant to the
|
* processors don't have a S-cache that would be relevant to the
|
||||||
* Linux memory management.
|
* Linux memory management.
|
||||||
*/
|
*/
|
||||||
switch (c->cputype) {
|
switch (current_cpu_type()) {
|
||||||
case CPU_R4000SC:
|
case CPU_R4000SC:
|
||||||
case CPU_R4000MC:
|
case CPU_R4000MC:
|
||||||
case CPU_R4400SC:
|
case CPU_R4400SC:
|
||||||
@ -1384,9 +1401,8 @@ static void r4k_cache_error_setup(void)
|
|||||||
{
|
{
|
||||||
extern char __weak except_vec2_generic;
|
extern char __weak except_vec2_generic;
|
||||||
extern char __weak except_vec2_sb1;
|
extern char __weak except_vec2_sb1;
|
||||||
struct cpuinfo_mips *c = ¤t_cpu_data;
|
|
||||||
|
|
||||||
switch (c->cputype) {
|
switch (current_cpu_type()) {
|
||||||
case CPU_SB1:
|
case CPU_SB1:
|
||||||
case CPU_SB1A:
|
case CPU_SB1A:
|
||||||
set_uncached_handler(0x100, &except_vec2_sb1, 0x80);
|
set_uncached_handler(0x100, &except_vec2_sb1, 0x80);
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include <linux/highmem.h>
|
#include <linux/highmem.h>
|
||||||
|
|
||||||
#include <asm/cache.h>
|
#include <asm/cache.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
#include <dma-coherence.h>
|
#include <dma-coherence.h>
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include <asm/bugs.h>
|
#include <asm/bugs.h>
|
||||||
#include <asm/cacheops.h>
|
#include <asm/cacheops.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
#include <asm/inst.h>
|
#include <asm/inst.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
#include <asm/mipsregs.h>
|
#include <asm/mipsregs.h>
|
||||||
#include <asm/bcache.h>
|
#include <asm/bcache.h>
|
||||||
#include <asm/cacheops.h>
|
#include <asm/cacheops.h>
|
||||||
@ -71,7 +72,7 @@ static inline int mips_sc_is_activated(struct cpuinfo_mips *c)
|
|||||||
unsigned int tmp;
|
unsigned int tmp;
|
||||||
|
|
||||||
/* Check the bypass bit (L2B) */
|
/* Check the bypass bit (L2B) */
|
||||||
switch (c->cputype) {
|
switch (current_cpu_type()) {
|
||||||
case CPU_34K:
|
case CPU_34K:
|
||||||
case CPU_74K:
|
case CPU_74K:
|
||||||
case CPU_1004K:
|
case CPU_1004K:
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
#include <asm/bootinfo.h>
|
#include <asm/bootinfo.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include <linux/cache.h>
|
#include <linux/cache.h>
|
||||||
|
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/war.h>
|
#include <asm/war.h>
|
||||||
#include <asm/uasm.h>
|
#include <asm/uasm.h>
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include <linux/timex.h>
|
#include <linux/timex.h>
|
||||||
#include <linux/mc146818rtc.h>
|
#include <linux/mc146818rtc.h>
|
||||||
|
|
||||||
|
#include <asm/cpu.h>
|
||||||
#include <asm/mipsregs.h>
|
#include <asm/mipsregs.h>
|
||||||
#include <asm/mipsmtregs.h>
|
#include <asm/mipsmtregs.h>
|
||||||
#include <asm/hardirq.h>
|
#include <asm/hardirq.h>
|
||||||
@ -76,7 +77,7 @@ static void __init estimate_frequencies(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (CONFIG_KVM_GUEST) && defined (CONFIG_KVM_HOST_FREQ)
|
#if defined (CONFIG_KVM_GUEST) && defined (CONFIG_KVM_HOST_FREQ)
|
||||||
unsigned int prid = read_c0_prid() & 0xffff00;
|
unsigned int prid = read_c0_prid() & (PRID_COMP_MASK | PRID_IMP_MASK);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XXXKYMA: hardwire the CPU frequency to Host Freq/4
|
* XXXKYMA: hardwire the CPU frequency to Host Freq/4
|
||||||
@ -169,7 +170,7 @@ unsigned int get_c0_compare_int(void)
|
|||||||
|
|
||||||
void __init plat_time_init(void)
|
void __init plat_time_init(void)
|
||||||
{
|
{
|
||||||
unsigned int prid = read_c0_prid() & 0xffff00;
|
unsigned int prid = read_c0_prid() & (PRID_COMP_MASK | PRID_IMP_MASK);
|
||||||
unsigned int freq;
|
unsigned int freq;
|
||||||
|
|
||||||
estimate_frequencies();
|
estimate_frequencies();
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
|
||||||
|
#include <asm/cpu.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
@ -34,7 +35,7 @@ static void __iomem *status_reg = (void __iomem *)0xbf000410;
|
|||||||
*/
|
*/
|
||||||
static unsigned int __init estimate_cpu_frequency(void)
|
static unsigned int __init estimate_cpu_frequency(void)
|
||||||
{
|
{
|
||||||
unsigned int prid = read_c0_prid() & 0xffff00;
|
unsigned int prid = read_c0_prid() & (PRID_COMP_MASK | PRID_IMP_MASK);
|
||||||
unsigned int tick = 0;
|
unsigned int tick = 0;
|
||||||
unsigned int freq;
|
unsigned int freq;
|
||||||
unsigned int orig;
|
unsigned int orig;
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
|
||||||
|
#include <asm/cpu.h>
|
||||||
#include <asm/mipsregs.h>
|
#include <asm/mipsregs.h>
|
||||||
#include <asm/netlogic/xlr/fmn.h>
|
#include <asm/netlogic/xlr/fmn.h>
|
||||||
#include <asm/netlogic/xlr/xlr.h>
|
#include <asm/netlogic/xlr/xlr.h>
|
||||||
@ -187,7 +188,7 @@ void xlr_board_info_setup(void)
|
|||||||
int processor_id, num_core;
|
int processor_id, num_core;
|
||||||
|
|
||||||
num_core = hweight32(nlm_current_node()->coremask);
|
num_core = hweight32(nlm_current_node()->coremask);
|
||||||
processor_id = read_c0_prid() & 0xff00;
|
processor_id = read_c0_prid() & PRID_IMP_MASK;
|
||||||
|
|
||||||
setup_cpu_fmninfo(cpu, num_core);
|
setup_cpu_fmninfo(cpu, num_core);
|
||||||
switch (processor_id) {
|
switch (processor_id) {
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include <linux/oprofile.h>
|
#include <linux/oprofile.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <asm/cpu-info.h>
|
#include <asm/cpu-info.h>
|
||||||
|
#include <asm/cpu-type.h>
|
||||||
|
|
||||||
#include "op_impl.h"
|
#include "op_impl.h"
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/console.h>
|
#include <linux/console.h>
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
|
#include <linux/vt.h>
|
||||||
|
|
||||||
#include <asm/sibyte/bcm1480_regs.h>
|
#include <asm/sibyte/bcm1480_regs.h>
|
||||||
#include <asm/sibyte/bcm1480_scd.h>
|
#include <asm/sibyte/bcm1480_scd.h>
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
|
|
||||||
#include <asm/bootinfo.h>
|
#include <asm/bootinfo.h>
|
||||||
|
#include <asm/cpu.h>
|
||||||
#include <asm/mipsregs.h>
|
#include <asm/mipsregs.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/sibyte/sb1250.h>
|
#include <asm/sibyte/sb1250.h>
|
||||||
@ -119,7 +120,7 @@ void __init bcm1480_setup(void)
|
|||||||
uint64_t sys_rev;
|
uint64_t sys_rev;
|
||||||
int plldiv;
|
int plldiv;
|
||||||
|
|
||||||
sb1_pass = read_c0_prid() & 0xff;
|
sb1_pass = read_c0_prid() & PRID_REV_MASK;
|
||||||
sys_rev = __raw_readq(IOADDR(A_SCD_SYSTEM_REVISION));
|
sys_rev = __raw_readq(IOADDR(A_SCD_SYSTEM_REVISION));
|
||||||
soc_type = SYS_SOC_TYPE(sys_rev);
|
soc_type = SYS_SOC_TYPE(sys_rev);
|
||||||
part_type = G_SYS_PART(sys_rev);
|
part_type = G_SYS_PART(sys_rev);
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
|
|
||||||
#include <asm/bootinfo.h>
|
#include <asm/bootinfo.h>
|
||||||
|
#include <asm/cpu.h>
|
||||||
#include <asm/mipsregs.h>
|
#include <asm/mipsregs.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/sibyte/sb1250.h>
|
#include <asm/sibyte/sb1250.h>
|
||||||
@ -182,7 +183,7 @@ void __init sb1250_setup(void)
|
|||||||
int plldiv;
|
int plldiv;
|
||||||
int bad_config = 0;
|
int bad_config = 0;
|
||||||
|
|
||||||
sb1_pass = read_c0_prid() & 0xff;
|
sb1_pass = read_c0_prid() & PRID_REV_MASK;
|
||||||
sys_rev = __raw_readq(IOADDR(A_SCD_SYSTEM_REVISION));
|
sys_rev = __raw_readq(IOADDR(A_SCD_SYSTEM_REVISION));
|
||||||
soc_type = SYS_SOC_TYPE(sys_rev);
|
soc_type = SYS_SOC_TYPE(sys_rev);
|
||||||
soc_pass = G_SYS_REVISION(sys_rev);
|
soc_pass = G_SYS_REVISION(sys_rev);
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <asm/bootinfo.h>
|
#include <asm/bootinfo.h>
|
||||||
|
#include <asm/cpu.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/reboot.h>
|
#include <asm/reboot.h>
|
||||||
#include <asm/sni.h>
|
#include <asm/sni.h>
|
||||||
@ -173,7 +174,7 @@ void __init plat_mem_setup(void)
|
|||||||
system_type = "RM300-Cxx";
|
system_type = "RM300-Cxx";
|
||||||
break;
|
break;
|
||||||
case SNI_BRD_PCI_DESKTOP:
|
case SNI_BRD_PCI_DESKTOP:
|
||||||
switch (read_c0_prid() & 0xff00) {
|
switch (read_c0_prid() & PRID_IMP_MASK) {
|
||||||
case PRID_IMP_R4600:
|
case PRID_IMP_R4600:
|
||||||
case PRID_IMP_R4700:
|
case PRID_IMP_R4700:
|
||||||
system_type = "RM200-C20";
|
system_type = "RM200-C20";
|
||||||
|
@ -361,7 +361,7 @@ config CMDLINE_OVERRIDE
|
|||||||
|
|
||||||
config VMALLOC_RESERVE
|
config VMALLOC_RESERVE
|
||||||
hex
|
hex
|
||||||
default 0x1000000
|
default 0x2000000
|
||||||
|
|
||||||
config HARDWALL
|
config HARDWALL
|
||||||
bool "Hardwall support to allow access to user dynamic network"
|
bool "Hardwall support to allow access to user dynamic network"
|
||||||
|
@ -21,7 +21,7 @@ struct alloc_buffer_stacks_param {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_alloc_buffer_stacks(gxio_mpipe_context_t * context,
|
int gxio_mpipe_alloc_buffer_stacks(gxio_mpipe_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
@ -45,7 +45,7 @@ struct init_buffer_stack_aux_param {
|
|||||||
unsigned int buffer_size_enum;
|
unsigned int buffer_size_enum;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_init_buffer_stack_aux(gxio_mpipe_context_t * context,
|
int gxio_mpipe_init_buffer_stack_aux(gxio_mpipe_context_t *context,
|
||||||
void *mem_va, size_t mem_size,
|
void *mem_va, size_t mem_size,
|
||||||
unsigned int mem_flags, unsigned int stack,
|
unsigned int mem_flags, unsigned int stack,
|
||||||
unsigned int buffer_size_enum)
|
unsigned int buffer_size_enum)
|
||||||
@ -80,7 +80,7 @@ struct alloc_notif_rings_param {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_alloc_notif_rings(gxio_mpipe_context_t * context,
|
int gxio_mpipe_alloc_notif_rings(gxio_mpipe_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
@ -102,7 +102,7 @@ struct init_notif_ring_aux_param {
|
|||||||
unsigned int ring;
|
unsigned int ring;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_init_notif_ring_aux(gxio_mpipe_context_t * context, void *mem_va,
|
int gxio_mpipe_init_notif_ring_aux(gxio_mpipe_context_t *context, void *mem_va,
|
||||||
size_t mem_size, unsigned int mem_flags,
|
size_t mem_size, unsigned int mem_flags,
|
||||||
unsigned int ring)
|
unsigned int ring)
|
||||||
{
|
{
|
||||||
@ -133,7 +133,7 @@ struct request_notif_ring_interrupt_param {
|
|||||||
unsigned int ring;
|
unsigned int ring;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_request_notif_ring_interrupt(gxio_mpipe_context_t * context,
|
int gxio_mpipe_request_notif_ring_interrupt(gxio_mpipe_context_t *context,
|
||||||
int inter_x, int inter_y,
|
int inter_x, int inter_y,
|
||||||
int inter_ipi, int inter_event,
|
int inter_ipi, int inter_event,
|
||||||
unsigned int ring)
|
unsigned int ring)
|
||||||
@ -158,7 +158,7 @@ struct enable_notif_ring_interrupt_param {
|
|||||||
unsigned int ring;
|
unsigned int ring;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_enable_notif_ring_interrupt(gxio_mpipe_context_t * context,
|
int gxio_mpipe_enable_notif_ring_interrupt(gxio_mpipe_context_t *context,
|
||||||
unsigned int ring)
|
unsigned int ring)
|
||||||
{
|
{
|
||||||
struct enable_notif_ring_interrupt_param temp;
|
struct enable_notif_ring_interrupt_param temp;
|
||||||
@ -179,7 +179,7 @@ struct alloc_notif_groups_param {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_alloc_notif_groups(gxio_mpipe_context_t * context,
|
int gxio_mpipe_alloc_notif_groups(gxio_mpipe_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
@ -201,7 +201,7 @@ struct init_notif_group_param {
|
|||||||
gxio_mpipe_notif_group_bits_t bits;
|
gxio_mpipe_notif_group_bits_t bits;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_init_notif_group(gxio_mpipe_context_t * context,
|
int gxio_mpipe_init_notif_group(gxio_mpipe_context_t *context,
|
||||||
unsigned int group,
|
unsigned int group,
|
||||||
gxio_mpipe_notif_group_bits_t bits)
|
gxio_mpipe_notif_group_bits_t bits)
|
||||||
{
|
{
|
||||||
@ -223,7 +223,7 @@ struct alloc_buckets_param {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_alloc_buckets(gxio_mpipe_context_t * context, unsigned int count,
|
int gxio_mpipe_alloc_buckets(gxio_mpipe_context_t *context, unsigned int count,
|
||||||
unsigned int first, unsigned int flags)
|
unsigned int first, unsigned int flags)
|
||||||
{
|
{
|
||||||
struct alloc_buckets_param temp;
|
struct alloc_buckets_param temp;
|
||||||
@ -244,7 +244,7 @@ struct init_bucket_param {
|
|||||||
MPIPE_LBL_INIT_DAT_BSTS_TBL_t bucket_info;
|
MPIPE_LBL_INIT_DAT_BSTS_TBL_t bucket_info;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_init_bucket(gxio_mpipe_context_t * context, unsigned int bucket,
|
int gxio_mpipe_init_bucket(gxio_mpipe_context_t *context, unsigned int bucket,
|
||||||
MPIPE_LBL_INIT_DAT_BSTS_TBL_t bucket_info)
|
MPIPE_LBL_INIT_DAT_BSTS_TBL_t bucket_info)
|
||||||
{
|
{
|
||||||
struct init_bucket_param temp;
|
struct init_bucket_param temp;
|
||||||
@ -265,7 +265,7 @@ struct alloc_edma_rings_param {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_alloc_edma_rings(gxio_mpipe_context_t * context,
|
int gxio_mpipe_alloc_edma_rings(gxio_mpipe_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
@ -288,7 +288,7 @@ struct init_edma_ring_aux_param {
|
|||||||
unsigned int channel;
|
unsigned int channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_init_edma_ring_aux(gxio_mpipe_context_t * context, void *mem_va,
|
int gxio_mpipe_init_edma_ring_aux(gxio_mpipe_context_t *context, void *mem_va,
|
||||||
size_t mem_size, unsigned int mem_flags,
|
size_t mem_size, unsigned int mem_flags,
|
||||||
unsigned int ring, unsigned int channel)
|
unsigned int ring, unsigned int channel)
|
||||||
{
|
{
|
||||||
@ -315,7 +315,7 @@ int gxio_mpipe_init_edma_ring_aux(gxio_mpipe_context_t * context, void *mem_va,
|
|||||||
EXPORT_SYMBOL(gxio_mpipe_init_edma_ring_aux);
|
EXPORT_SYMBOL(gxio_mpipe_init_edma_ring_aux);
|
||||||
|
|
||||||
|
|
||||||
int gxio_mpipe_commit_rules(gxio_mpipe_context_t * context, const void *blob,
|
int gxio_mpipe_commit_rules(gxio_mpipe_context_t *context, const void *blob,
|
||||||
size_t blob_size)
|
size_t blob_size)
|
||||||
{
|
{
|
||||||
const void *params = blob;
|
const void *params = blob;
|
||||||
@ -332,7 +332,7 @@ struct register_client_memory_param {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_register_client_memory(gxio_mpipe_context_t * context,
|
int gxio_mpipe_register_client_memory(gxio_mpipe_context_t *context,
|
||||||
unsigned int iotlb, HV_PTE pte,
|
unsigned int iotlb, HV_PTE pte,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
@ -355,7 +355,7 @@ struct link_open_aux_param {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_link_open_aux(gxio_mpipe_context_t * context,
|
int gxio_mpipe_link_open_aux(gxio_mpipe_context_t *context,
|
||||||
_gxio_mpipe_link_name_t name, unsigned int flags)
|
_gxio_mpipe_link_name_t name, unsigned int flags)
|
||||||
{
|
{
|
||||||
struct link_open_aux_param temp;
|
struct link_open_aux_param temp;
|
||||||
@ -374,7 +374,7 @@ struct link_close_aux_param {
|
|||||||
int mac;
|
int mac;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_link_close_aux(gxio_mpipe_context_t * context, int mac)
|
int gxio_mpipe_link_close_aux(gxio_mpipe_context_t *context, int mac)
|
||||||
{
|
{
|
||||||
struct link_close_aux_param temp;
|
struct link_close_aux_param temp;
|
||||||
struct link_close_aux_param *params = &temp;
|
struct link_close_aux_param *params = &temp;
|
||||||
@ -393,7 +393,7 @@ struct link_set_attr_aux_param {
|
|||||||
int64_t val;
|
int64_t val;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_link_set_attr_aux(gxio_mpipe_context_t * context, int mac,
|
int gxio_mpipe_link_set_attr_aux(gxio_mpipe_context_t *context, int mac,
|
||||||
uint32_t attr, int64_t val)
|
uint32_t attr, int64_t val)
|
||||||
{
|
{
|
||||||
struct link_set_attr_aux_param temp;
|
struct link_set_attr_aux_param temp;
|
||||||
@ -415,8 +415,8 @@ struct get_timestamp_aux_param {
|
|||||||
uint64_t cycles;
|
uint64_t cycles;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_get_timestamp_aux(gxio_mpipe_context_t * context, uint64_t * sec,
|
int gxio_mpipe_get_timestamp_aux(gxio_mpipe_context_t *context, uint64_t *sec,
|
||||||
uint64_t * nsec, uint64_t * cycles)
|
uint64_t *nsec, uint64_t *cycles)
|
||||||
{
|
{
|
||||||
int __result;
|
int __result;
|
||||||
struct get_timestamp_aux_param temp;
|
struct get_timestamp_aux_param temp;
|
||||||
@ -440,7 +440,7 @@ struct set_timestamp_aux_param {
|
|||||||
uint64_t cycles;
|
uint64_t cycles;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_set_timestamp_aux(gxio_mpipe_context_t * context, uint64_t sec,
|
int gxio_mpipe_set_timestamp_aux(gxio_mpipe_context_t *context, uint64_t sec,
|
||||||
uint64_t nsec, uint64_t cycles)
|
uint64_t nsec, uint64_t cycles)
|
||||||
{
|
{
|
||||||
struct set_timestamp_aux_param temp;
|
struct set_timestamp_aux_param temp;
|
||||||
@ -460,8 +460,7 @@ struct adjust_timestamp_aux_param {
|
|||||||
int64_t nsec;
|
int64_t nsec;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_adjust_timestamp_aux(gxio_mpipe_context_t * context,
|
int gxio_mpipe_adjust_timestamp_aux(gxio_mpipe_context_t *context, int64_t nsec)
|
||||||
int64_t nsec)
|
|
||||||
{
|
{
|
||||||
struct adjust_timestamp_aux_param temp;
|
struct adjust_timestamp_aux_param temp;
|
||||||
struct adjust_timestamp_aux_param *params = &temp;
|
struct adjust_timestamp_aux_param *params = &temp;
|
||||||
@ -475,25 +474,6 @@ int gxio_mpipe_adjust_timestamp_aux(gxio_mpipe_context_t * context,
|
|||||||
|
|
||||||
EXPORT_SYMBOL(gxio_mpipe_adjust_timestamp_aux);
|
EXPORT_SYMBOL(gxio_mpipe_adjust_timestamp_aux);
|
||||||
|
|
||||||
struct adjust_timestamp_freq_param {
|
|
||||||
int32_t ppb;
|
|
||||||
};
|
|
||||||
|
|
||||||
int gxio_mpipe_adjust_timestamp_freq(gxio_mpipe_context_t * context,
|
|
||||||
int32_t ppb)
|
|
||||||
{
|
|
||||||
struct adjust_timestamp_freq_param temp;
|
|
||||||
struct adjust_timestamp_freq_param *params = &temp;
|
|
||||||
|
|
||||||
params->ppb = ppb;
|
|
||||||
|
|
||||||
return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
|
|
||||||
sizeof(*params),
|
|
||||||
GXIO_MPIPE_OP_ADJUST_TIMESTAMP_FREQ);
|
|
||||||
}
|
|
||||||
|
|
||||||
EXPORT_SYMBOL(gxio_mpipe_adjust_timestamp_freq);
|
|
||||||
|
|
||||||
struct config_edma_ring_blks_param {
|
struct config_edma_ring_blks_param {
|
||||||
unsigned int ering;
|
unsigned int ering;
|
||||||
unsigned int max_blks;
|
unsigned int max_blks;
|
||||||
@ -501,7 +481,7 @@ struct config_edma_ring_blks_param {
|
|||||||
unsigned int db;
|
unsigned int db;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_config_edma_ring_blks(gxio_mpipe_context_t * context,
|
int gxio_mpipe_config_edma_ring_blks(gxio_mpipe_context_t *context,
|
||||||
unsigned int ering, unsigned int max_blks,
|
unsigned int ering, unsigned int max_blks,
|
||||||
unsigned int min_snf_blks, unsigned int db)
|
unsigned int min_snf_blks, unsigned int db)
|
||||||
{
|
{
|
||||||
@ -520,11 +500,29 @@ int gxio_mpipe_config_edma_ring_blks(gxio_mpipe_context_t * context,
|
|||||||
|
|
||||||
EXPORT_SYMBOL(gxio_mpipe_config_edma_ring_blks);
|
EXPORT_SYMBOL(gxio_mpipe_config_edma_ring_blks);
|
||||||
|
|
||||||
|
struct adjust_timestamp_freq_param {
|
||||||
|
int32_t ppb;
|
||||||
|
};
|
||||||
|
|
||||||
|
int gxio_mpipe_adjust_timestamp_freq(gxio_mpipe_context_t *context, int32_t ppb)
|
||||||
|
{
|
||||||
|
struct adjust_timestamp_freq_param temp;
|
||||||
|
struct adjust_timestamp_freq_param *params = &temp;
|
||||||
|
|
||||||
|
params->ppb = ppb;
|
||||||
|
|
||||||
|
return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
|
||||||
|
sizeof(*params),
|
||||||
|
GXIO_MPIPE_OP_ADJUST_TIMESTAMP_FREQ);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(gxio_mpipe_adjust_timestamp_freq);
|
||||||
|
|
||||||
struct arm_pollfd_param {
|
struct arm_pollfd_param {
|
||||||
union iorpc_pollfd pollfd;
|
union iorpc_pollfd pollfd;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_arm_pollfd(gxio_mpipe_context_t * context, int pollfd_cookie)
|
int gxio_mpipe_arm_pollfd(gxio_mpipe_context_t *context, int pollfd_cookie)
|
||||||
{
|
{
|
||||||
struct arm_pollfd_param temp;
|
struct arm_pollfd_param temp;
|
||||||
struct arm_pollfd_param *params = &temp;
|
struct arm_pollfd_param *params = &temp;
|
||||||
@ -541,7 +539,7 @@ struct close_pollfd_param {
|
|||||||
union iorpc_pollfd pollfd;
|
union iorpc_pollfd pollfd;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_close_pollfd(gxio_mpipe_context_t * context, int pollfd_cookie)
|
int gxio_mpipe_close_pollfd(gxio_mpipe_context_t *context, int pollfd_cookie)
|
||||||
{
|
{
|
||||||
struct close_pollfd_param temp;
|
struct close_pollfd_param temp;
|
||||||
struct close_pollfd_param *params = &temp;
|
struct close_pollfd_param *params = &temp;
|
||||||
@ -558,7 +556,7 @@ struct get_mmio_base_param {
|
|||||||
HV_PTE base;
|
HV_PTE base;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_get_mmio_base(gxio_mpipe_context_t * context, HV_PTE *base)
|
int gxio_mpipe_get_mmio_base(gxio_mpipe_context_t *context, HV_PTE *base)
|
||||||
{
|
{
|
||||||
int __result;
|
int __result;
|
||||||
struct get_mmio_base_param temp;
|
struct get_mmio_base_param temp;
|
||||||
@ -579,7 +577,7 @@ struct check_mmio_offset_param {
|
|||||||
unsigned long size;
|
unsigned long size;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_check_mmio_offset(gxio_mpipe_context_t * context,
|
int gxio_mpipe_check_mmio_offset(gxio_mpipe_context_t *context,
|
||||||
unsigned long offset, unsigned long size)
|
unsigned long offset, unsigned long size)
|
||||||
{
|
{
|
||||||
struct check_mmio_offset_param temp;
|
struct check_mmio_offset_param temp;
|
||||||
|
@ -15,12 +15,11 @@
|
|||||||
/* This file is machine-generated; DO NOT EDIT! */
|
/* This file is machine-generated; DO NOT EDIT! */
|
||||||
#include "gxio/iorpc_mpipe_info.h"
|
#include "gxio/iorpc_mpipe_info.h"
|
||||||
|
|
||||||
|
|
||||||
struct instance_aux_param {
|
struct instance_aux_param {
|
||||||
_gxio_mpipe_link_name_t name;
|
_gxio_mpipe_link_name_t name;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_info_instance_aux(gxio_mpipe_info_context_t * context,
|
int gxio_mpipe_info_instance_aux(gxio_mpipe_info_context_t *context,
|
||||||
_gxio_mpipe_link_name_t name)
|
_gxio_mpipe_link_name_t name)
|
||||||
{
|
{
|
||||||
struct instance_aux_param temp;
|
struct instance_aux_param temp;
|
||||||
@ -39,10 +38,10 @@ struct enumerate_aux_param {
|
|||||||
_gxio_mpipe_link_mac_t mac;
|
_gxio_mpipe_link_mac_t mac;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_info_enumerate_aux(gxio_mpipe_info_context_t * context,
|
int gxio_mpipe_info_enumerate_aux(gxio_mpipe_info_context_t *context,
|
||||||
unsigned int idx,
|
unsigned int idx,
|
||||||
_gxio_mpipe_link_name_t * name,
|
_gxio_mpipe_link_name_t *name,
|
||||||
_gxio_mpipe_link_mac_t * mac)
|
_gxio_mpipe_link_mac_t *mac)
|
||||||
{
|
{
|
||||||
int __result;
|
int __result;
|
||||||
struct enumerate_aux_param temp;
|
struct enumerate_aux_param temp;
|
||||||
@ -50,7 +49,7 @@ int gxio_mpipe_info_enumerate_aux(gxio_mpipe_info_context_t * context,
|
|||||||
|
|
||||||
__result =
|
__result =
|
||||||
hv_dev_pread(context->fd, 0, (HV_VirtAddr) params, sizeof(*params),
|
hv_dev_pread(context->fd, 0, (HV_VirtAddr) params, sizeof(*params),
|
||||||
(((uint64_t) idx << 32) |
|
(((uint64_t)idx << 32) |
|
||||||
GXIO_MPIPE_INFO_OP_ENUMERATE_AUX));
|
GXIO_MPIPE_INFO_OP_ENUMERATE_AUX));
|
||||||
*name = params->name;
|
*name = params->name;
|
||||||
*mac = params->mac;
|
*mac = params->mac;
|
||||||
@ -64,7 +63,7 @@ struct get_mmio_base_param {
|
|||||||
HV_PTE base;
|
HV_PTE base;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_info_get_mmio_base(gxio_mpipe_info_context_t * context,
|
int gxio_mpipe_info_get_mmio_base(gxio_mpipe_info_context_t *context,
|
||||||
HV_PTE *base)
|
HV_PTE *base)
|
||||||
{
|
{
|
||||||
int __result;
|
int __result;
|
||||||
@ -86,7 +85,7 @@ struct check_mmio_offset_param {
|
|||||||
unsigned long size;
|
unsigned long size;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_mpipe_info_check_mmio_offset(gxio_mpipe_info_context_t * context,
|
int gxio_mpipe_info_check_mmio_offset(gxio_mpipe_info_context_t *context,
|
||||||
unsigned long offset, unsigned long size)
|
unsigned long offset, unsigned long size)
|
||||||
{
|
{
|
||||||
struct check_mmio_offset_param temp;
|
struct check_mmio_offset_param temp;
|
||||||
|
@ -21,7 +21,7 @@ struct alloc_asids_param {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_alloc_asids(gxio_trio_context_t * context, unsigned int count,
|
int gxio_trio_alloc_asids(gxio_trio_context_t *context, unsigned int count,
|
||||||
unsigned int first, unsigned int flags)
|
unsigned int first, unsigned int flags)
|
||||||
{
|
{
|
||||||
struct alloc_asids_param temp;
|
struct alloc_asids_param temp;
|
||||||
@ -44,7 +44,7 @@ struct alloc_memory_maps_param {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_alloc_memory_maps(gxio_trio_context_t * context,
|
int gxio_trio_alloc_memory_maps(gxio_trio_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
@ -67,7 +67,7 @@ struct alloc_scatter_queues_param {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_alloc_scatter_queues(gxio_trio_context_t * context,
|
int gxio_trio_alloc_scatter_queues(gxio_trio_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
@ -91,7 +91,7 @@ struct alloc_pio_regions_param {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_alloc_pio_regions(gxio_trio_context_t * context,
|
int gxio_trio_alloc_pio_regions(gxio_trio_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
@ -115,7 +115,7 @@ struct init_pio_region_aux_param {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_init_pio_region_aux(gxio_trio_context_t * context,
|
int gxio_trio_init_pio_region_aux(gxio_trio_context_t *context,
|
||||||
unsigned int pio_region, unsigned int mac,
|
unsigned int pio_region, unsigned int mac,
|
||||||
uint32_t bus_address_hi, unsigned int flags)
|
uint32_t bus_address_hi, unsigned int flags)
|
||||||
{
|
{
|
||||||
@ -145,7 +145,7 @@ struct init_memory_map_mmu_aux_param {
|
|||||||
unsigned int order_mode;
|
unsigned int order_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_init_memory_map_mmu_aux(gxio_trio_context_t * context,
|
int gxio_trio_init_memory_map_mmu_aux(gxio_trio_context_t *context,
|
||||||
unsigned int map, unsigned long va,
|
unsigned int map, unsigned long va,
|
||||||
uint64_t size, unsigned int asid,
|
uint64_t size, unsigned int asid,
|
||||||
unsigned int mac, uint64_t bus_address,
|
unsigned int mac, uint64_t bus_address,
|
||||||
@ -175,7 +175,7 @@ struct get_port_property_param {
|
|||||||
struct pcie_trio_ports_property trio_ports;
|
struct pcie_trio_ports_property trio_ports;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_get_port_property(gxio_trio_context_t * context,
|
int gxio_trio_get_port_property(gxio_trio_context_t *context,
|
||||||
struct pcie_trio_ports_property *trio_ports)
|
struct pcie_trio_ports_property *trio_ports)
|
||||||
{
|
{
|
||||||
int __result;
|
int __result;
|
||||||
@ -198,7 +198,7 @@ struct config_legacy_intr_param {
|
|||||||
unsigned int intx;
|
unsigned int intx;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_config_legacy_intr(gxio_trio_context_t * context, int inter_x,
|
int gxio_trio_config_legacy_intr(gxio_trio_context_t *context, int inter_x,
|
||||||
int inter_y, int inter_ipi, int inter_event,
|
int inter_y, int inter_ipi, int inter_event,
|
||||||
unsigned int mac, unsigned int intx)
|
unsigned int mac, unsigned int intx)
|
||||||
{
|
{
|
||||||
@ -227,7 +227,7 @@ struct config_msi_intr_param {
|
|||||||
unsigned int asid;
|
unsigned int asid;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_config_msi_intr(gxio_trio_context_t * context, int inter_x,
|
int gxio_trio_config_msi_intr(gxio_trio_context_t *context, int inter_x,
|
||||||
int inter_y, int inter_ipi, int inter_event,
|
int inter_y, int inter_ipi, int inter_event,
|
||||||
unsigned int mac, unsigned int mem_map,
|
unsigned int mac, unsigned int mem_map,
|
||||||
uint64_t mem_map_base, uint64_t mem_map_limit,
|
uint64_t mem_map_base, uint64_t mem_map_limit,
|
||||||
@ -259,7 +259,7 @@ struct set_mps_mrs_param {
|
|||||||
unsigned int mac;
|
unsigned int mac;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_set_mps_mrs(gxio_trio_context_t * context, uint16_t mps,
|
int gxio_trio_set_mps_mrs(gxio_trio_context_t *context, uint16_t mps,
|
||||||
uint16_t mrs, unsigned int mac)
|
uint16_t mrs, unsigned int mac)
|
||||||
{
|
{
|
||||||
struct set_mps_mrs_param temp;
|
struct set_mps_mrs_param temp;
|
||||||
@ -279,7 +279,7 @@ struct force_rc_link_up_param {
|
|||||||
unsigned int mac;
|
unsigned int mac;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_force_rc_link_up(gxio_trio_context_t * context, unsigned int mac)
|
int gxio_trio_force_rc_link_up(gxio_trio_context_t *context, unsigned int mac)
|
||||||
{
|
{
|
||||||
struct force_rc_link_up_param temp;
|
struct force_rc_link_up_param temp;
|
||||||
struct force_rc_link_up_param *params = &temp;
|
struct force_rc_link_up_param *params = &temp;
|
||||||
@ -296,7 +296,7 @@ struct force_ep_link_up_param {
|
|||||||
unsigned int mac;
|
unsigned int mac;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_force_ep_link_up(gxio_trio_context_t * context, unsigned int mac)
|
int gxio_trio_force_ep_link_up(gxio_trio_context_t *context, unsigned int mac)
|
||||||
{
|
{
|
||||||
struct force_ep_link_up_param temp;
|
struct force_ep_link_up_param temp;
|
||||||
struct force_ep_link_up_param *params = &temp;
|
struct force_ep_link_up_param *params = &temp;
|
||||||
@ -313,7 +313,7 @@ struct get_mmio_base_param {
|
|||||||
HV_PTE base;
|
HV_PTE base;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_get_mmio_base(gxio_trio_context_t * context, HV_PTE *base)
|
int gxio_trio_get_mmio_base(gxio_trio_context_t *context, HV_PTE *base)
|
||||||
{
|
{
|
||||||
int __result;
|
int __result;
|
||||||
struct get_mmio_base_param temp;
|
struct get_mmio_base_param temp;
|
||||||
@ -334,7 +334,7 @@ struct check_mmio_offset_param {
|
|||||||
unsigned long size;
|
unsigned long size;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_trio_check_mmio_offset(gxio_trio_context_t * context,
|
int gxio_trio_check_mmio_offset(gxio_trio_context_t *context,
|
||||||
unsigned long offset, unsigned long size)
|
unsigned long offset, unsigned long size)
|
||||||
{
|
{
|
||||||
struct check_mmio_offset_param temp;
|
struct check_mmio_offset_param temp;
|
||||||
|
@ -19,7 +19,7 @@ struct cfg_interrupt_param {
|
|||||||
union iorpc_interrupt interrupt;
|
union iorpc_interrupt interrupt;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_usb_host_cfg_interrupt(gxio_usb_host_context_t * context, int inter_x,
|
int gxio_usb_host_cfg_interrupt(gxio_usb_host_context_t *context, int inter_x,
|
||||||
int inter_y, int inter_ipi, int inter_event)
|
int inter_y, int inter_ipi, int inter_event)
|
||||||
{
|
{
|
||||||
struct cfg_interrupt_param temp;
|
struct cfg_interrupt_param temp;
|
||||||
@ -41,7 +41,7 @@ struct register_client_memory_param {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_usb_host_register_client_memory(gxio_usb_host_context_t * context,
|
int gxio_usb_host_register_client_memory(gxio_usb_host_context_t *context,
|
||||||
HV_PTE pte, unsigned int flags)
|
HV_PTE pte, unsigned int flags)
|
||||||
{
|
{
|
||||||
struct register_client_memory_param temp;
|
struct register_client_memory_param temp;
|
||||||
@ -61,7 +61,7 @@ struct get_mmio_base_param {
|
|||||||
HV_PTE base;
|
HV_PTE base;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_usb_host_get_mmio_base(gxio_usb_host_context_t * context, HV_PTE *base)
|
int gxio_usb_host_get_mmio_base(gxio_usb_host_context_t *context, HV_PTE *base)
|
||||||
{
|
{
|
||||||
int __result;
|
int __result;
|
||||||
struct get_mmio_base_param temp;
|
struct get_mmio_base_param temp;
|
||||||
@ -82,7 +82,7 @@ struct check_mmio_offset_param {
|
|||||||
unsigned long size;
|
unsigned long size;
|
||||||
};
|
};
|
||||||
|
|
||||||
int gxio_usb_host_check_mmio_offset(gxio_usb_host_context_t * context,
|
int gxio_usb_host_check_mmio_offset(gxio_usb_host_context_t *context,
|
||||||
unsigned long offset, unsigned long size)
|
unsigned long offset, unsigned long size)
|
||||||
{
|
{
|
||||||
struct check_mmio_offset_param temp;
|
struct check_mmio_offset_param temp;
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
#include <gxio/kiorpc.h>
|
#include <gxio/kiorpc.h>
|
||||||
#include <gxio/usb_host.h>
|
#include <gxio/usb_host.h>
|
||||||
|
|
||||||
int gxio_usb_host_init(gxio_usb_host_context_t * context, int usb_index,
|
int gxio_usb_host_init(gxio_usb_host_context_t *context, int usb_index,
|
||||||
int is_ehci)
|
int is_ehci)
|
||||||
{
|
{
|
||||||
char file[32];
|
char file[32];
|
||||||
@ -63,7 +63,7 @@ int gxio_usb_host_init(gxio_usb_host_context_t * context, int usb_index,
|
|||||||
|
|
||||||
EXPORT_SYMBOL_GPL(gxio_usb_host_init);
|
EXPORT_SYMBOL_GPL(gxio_usb_host_init);
|
||||||
|
|
||||||
int gxio_usb_host_destroy(gxio_usb_host_context_t * context)
|
int gxio_usb_host_destroy(gxio_usb_host_context_t *context)
|
||||||
{
|
{
|
||||||
iounmap((void __force __iomem *)(context->mmio_base));
|
iounmap((void __force __iomem *)(context->mmio_base));
|
||||||
hv_dev_close(context->fd);
|
hv_dev_close(context->fd);
|
||||||
@ -76,14 +76,14 @@ int gxio_usb_host_destroy(gxio_usb_host_context_t * context)
|
|||||||
|
|
||||||
EXPORT_SYMBOL_GPL(gxio_usb_host_destroy);
|
EXPORT_SYMBOL_GPL(gxio_usb_host_destroy);
|
||||||
|
|
||||||
void *gxio_usb_host_get_reg_start(gxio_usb_host_context_t * context)
|
void *gxio_usb_host_get_reg_start(gxio_usb_host_context_t *context)
|
||||||
{
|
{
|
||||||
return context->mmio_base;
|
return context->mmio_base;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL_GPL(gxio_usb_host_get_reg_start);
|
EXPORT_SYMBOL_GPL(gxio_usb_host_get_reg_start);
|
||||||
|
|
||||||
size_t gxio_usb_host_get_reg_len(gxio_usb_host_context_t * context)
|
size_t gxio_usb_host_get_reg_len(gxio_usb_host_context_t *context)
|
||||||
{
|
{
|
||||||
return HV_USB_HOST_MMIO_SIZE;
|
return HV_USB_HOST_MMIO_SIZE;
|
||||||
}
|
}
|
||||||
|
@ -176,7 +176,18 @@ typedef union
|
|||||||
*/
|
*/
|
||||||
uint_reg_t stack_idx : 5;
|
uint_reg_t stack_idx : 5;
|
||||||
/* Reserved. */
|
/* Reserved. */
|
||||||
uint_reg_t __reserved_2 : 5;
|
uint_reg_t __reserved_2 : 3;
|
||||||
|
/*
|
||||||
|
* Instance ID. For devices that support automatic buffer return between
|
||||||
|
* mPIPE instances, this field indicates the buffer owner. If the INST
|
||||||
|
* field does not match the mPIPE's instance number when a packet is
|
||||||
|
* egressed, buffers with HWB set will be returned to the other mPIPE
|
||||||
|
* instance. Note that not all devices support multi-mPIPE buffer
|
||||||
|
* return. The MPIPE_EDMA_INFO.REMOTE_BUFF_RTN_SUPPORT bit indicates
|
||||||
|
* whether the INST field in the buffer descriptor is populated by iDMA
|
||||||
|
* hardware. This field is ignored on writes.
|
||||||
|
*/
|
||||||
|
uint_reg_t inst : 2;
|
||||||
/*
|
/*
|
||||||
* Reads as one to indicate that this is a hardware managed buffer.
|
* Reads as one to indicate that this is a hardware managed buffer.
|
||||||
* Ignored on writes since all buffers on a given stack are the same size.
|
* Ignored on writes since all buffers on a given stack are the same size.
|
||||||
@ -205,7 +216,8 @@ typedef union
|
|||||||
uint_reg_t c : 2;
|
uint_reg_t c : 2;
|
||||||
uint_reg_t size : 3;
|
uint_reg_t size : 3;
|
||||||
uint_reg_t hwb : 1;
|
uint_reg_t hwb : 1;
|
||||||
uint_reg_t __reserved_2 : 5;
|
uint_reg_t inst : 2;
|
||||||
|
uint_reg_t __reserved_2 : 3;
|
||||||
uint_reg_t stack_idx : 5;
|
uint_reg_t stack_idx : 5;
|
||||||
uint_reg_t __reserved_1 : 6;
|
uint_reg_t __reserved_1 : 6;
|
||||||
int_reg_t va : 35;
|
int_reg_t va : 35;
|
||||||
@ -231,9 +243,9 @@ typedef union
|
|||||||
/* Reserved. */
|
/* Reserved. */
|
||||||
uint_reg_t __reserved_0 : 3;
|
uint_reg_t __reserved_0 : 3;
|
||||||
/* eDMA ring being accessed */
|
/* eDMA ring being accessed */
|
||||||
uint_reg_t ring : 5;
|
uint_reg_t ring : 6;
|
||||||
/* Reserved. */
|
/* Reserved. */
|
||||||
uint_reg_t __reserved_1 : 18;
|
uint_reg_t __reserved_1 : 17;
|
||||||
/*
|
/*
|
||||||
* This field of the address selects the region (address space) to be
|
* This field of the address selects the region (address space) to be
|
||||||
* accessed. For the egress DMA post region, this field must be 5.
|
* accessed. For the egress DMA post region, this field must be 5.
|
||||||
@ -250,8 +262,8 @@ typedef union
|
|||||||
uint_reg_t svc_dom : 5;
|
uint_reg_t svc_dom : 5;
|
||||||
uint_reg_t __reserved_2 : 6;
|
uint_reg_t __reserved_2 : 6;
|
||||||
uint_reg_t region : 3;
|
uint_reg_t region : 3;
|
||||||
uint_reg_t __reserved_1 : 18;
|
uint_reg_t __reserved_1 : 17;
|
||||||
uint_reg_t ring : 5;
|
uint_reg_t ring : 6;
|
||||||
uint_reg_t __reserved_0 : 3;
|
uint_reg_t __reserved_0 : 3;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
@ -16,13 +16,13 @@
|
|||||||
#ifndef __ARCH_MPIPE_CONSTANTS_H__
|
#ifndef __ARCH_MPIPE_CONSTANTS_H__
|
||||||
#define __ARCH_MPIPE_CONSTANTS_H__
|
#define __ARCH_MPIPE_CONSTANTS_H__
|
||||||
|
|
||||||
#define MPIPE_NUM_CLASSIFIERS 10
|
#define MPIPE_NUM_CLASSIFIERS 16
|
||||||
#define MPIPE_CLS_MHZ 1200
|
#define MPIPE_CLS_MHZ 1200
|
||||||
|
|
||||||
#define MPIPE_NUM_EDMA_RINGS 32
|
#define MPIPE_NUM_EDMA_RINGS 64
|
||||||
|
|
||||||
#define MPIPE_NUM_SGMII_MACS 16
|
#define MPIPE_NUM_SGMII_MACS 16
|
||||||
#define MPIPE_NUM_XAUI_MACS 4
|
#define MPIPE_NUM_XAUI_MACS 16
|
||||||
#define MPIPE_NUM_LOOPBACK_CHANNELS 4
|
#define MPIPE_NUM_LOOPBACK_CHANNELS 4
|
||||||
#define MPIPE_NUM_NON_LB_CHANNELS 28
|
#define MPIPE_NUM_NON_LB_CHANNELS 28
|
||||||
|
|
||||||
|
@ -44,8 +44,14 @@ typedef union
|
|||||||
* descriptors toggles each time the ring tail pointer wraps.
|
* descriptors toggles each time the ring tail pointer wraps.
|
||||||
*/
|
*/
|
||||||
uint_reg_t gen : 1;
|
uint_reg_t gen : 1;
|
||||||
|
/**
|
||||||
|
* For devices with EDMA reorder support, this field allows the
|
||||||
|
* descriptor to select the egress FIFO. The associated DMA ring must
|
||||||
|
* have ALLOW_EFIFO_SEL enabled.
|
||||||
|
*/
|
||||||
|
uint_reg_t efifo_sel : 6;
|
||||||
/** Reserved. Must be zero. */
|
/** Reserved. Must be zero. */
|
||||||
uint_reg_t r0 : 7;
|
uint_reg_t r0 : 1;
|
||||||
/** Checksum generation enabled for this transfer. */
|
/** Checksum generation enabled for this transfer. */
|
||||||
uint_reg_t csum : 1;
|
uint_reg_t csum : 1;
|
||||||
/**
|
/**
|
||||||
@ -110,7 +116,8 @@ typedef union
|
|||||||
uint_reg_t notif : 1;
|
uint_reg_t notif : 1;
|
||||||
uint_reg_t ns : 1;
|
uint_reg_t ns : 1;
|
||||||
uint_reg_t csum : 1;
|
uint_reg_t csum : 1;
|
||||||
uint_reg_t r0 : 7;
|
uint_reg_t r0 : 1;
|
||||||
|
uint_reg_t efifo_sel : 6;
|
||||||
uint_reg_t gen : 1;
|
uint_reg_t gen : 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -126,14 +133,16 @@ typedef union
|
|||||||
/** Reserved. */
|
/** Reserved. */
|
||||||
uint_reg_t __reserved_1 : 3;
|
uint_reg_t __reserved_1 : 3;
|
||||||
/**
|
/**
|
||||||
* Instance ID. For devices that support more than one mPIPE instance,
|
* Instance ID. For devices that support automatic buffer return between
|
||||||
* this field indicates the buffer owner. If the INST field does not
|
* mPIPE instances, this field indicates the buffer owner. If the INST
|
||||||
* match the mPIPE's instance number when a packet is egressed, buffers
|
* field does not match the mPIPE's instance number when a packet is
|
||||||
* with HWB set will be returned to the other mPIPE instance.
|
* egressed, buffers with HWB set will be returned to the other mPIPE
|
||||||
|
* instance. Note that not all devices support multi-mPIPE buffer
|
||||||
|
* return. The MPIPE_EDMA_INFO.REMOTE_BUFF_RTN_SUPPORT bit indicates
|
||||||
|
* whether the INST field in the buffer descriptor is populated by iDMA
|
||||||
|
* hardware.
|
||||||
*/
|
*/
|
||||||
uint_reg_t inst : 1;
|
uint_reg_t inst : 2;
|
||||||
/** Reserved. */
|
|
||||||
uint_reg_t __reserved_2 : 1;
|
|
||||||
/**
|
/**
|
||||||
* Always set to one by hardware in iDMA packet descriptors. For eDMA,
|
* Always set to one by hardware in iDMA packet descriptors. For eDMA,
|
||||||
* indicates whether the buffer will be released to the buffer stack
|
* indicates whether the buffer will be released to the buffer stack
|
||||||
@ -166,8 +175,7 @@ typedef union
|
|||||||
uint_reg_t c : 2;
|
uint_reg_t c : 2;
|
||||||
uint_reg_t size : 3;
|
uint_reg_t size : 3;
|
||||||
uint_reg_t hwb : 1;
|
uint_reg_t hwb : 1;
|
||||||
uint_reg_t __reserved_2 : 1;
|
uint_reg_t inst : 2;
|
||||||
uint_reg_t inst : 1;
|
|
||||||
uint_reg_t __reserved_1 : 3;
|
uint_reg_t __reserved_1 : 3;
|
||||||
uint_reg_t stack_idx : 5;
|
uint_reg_t stack_idx : 5;
|
||||||
uint_reg_t __reserved_0 : 6;
|
uint_reg_t __reserved_0 : 6;
|
||||||
@ -408,7 +416,10 @@ typedef union
|
|||||||
/**
|
/**
|
||||||
* Sequence number applied when packet is distributed. Classifier
|
* Sequence number applied when packet is distributed. Classifier
|
||||||
* selects which sequence number is to be applied by writing the 13-bit
|
* selects which sequence number is to be applied by writing the 13-bit
|
||||||
* SQN-selector into this field.
|
* SQN-selector into this field. For devices that support EXT_SQN (as
|
||||||
|
* indicated in IDMA_INFO.EXT_SQN_SUPPORT), the GP_SQN can be extended to
|
||||||
|
* 32-bits via the IDMA_CTL.EXT_SQN register. In this case the
|
||||||
|
* PACKET_SQN will be reduced to 32 bits.
|
||||||
*/
|
*/
|
||||||
uint_reg_t gp_sqn : 16;
|
uint_reg_t gp_sqn : 16;
|
||||||
/**
|
/**
|
||||||
@ -451,14 +462,16 @@ typedef union
|
|||||||
/** Reserved. */
|
/** Reserved. */
|
||||||
uint_reg_t __reserved_5 : 3;
|
uint_reg_t __reserved_5 : 3;
|
||||||
/**
|
/**
|
||||||
* Instance ID. For devices that support more than one mPIPE instance,
|
* Instance ID. For devices that support automatic buffer return between
|
||||||
* this field indicates the buffer owner. If the INST field does not
|
* mPIPE instances, this field indicates the buffer owner. If the INST
|
||||||
* match the mPIPE's instance number when a packet is egressed, buffers
|
* field does not match the mPIPE's instance number when a packet is
|
||||||
* with HWB set will be returned to the other mPIPE instance.
|
* egressed, buffers with HWB set will be returned to the other mPIPE
|
||||||
|
* instance. Note that not all devices support multi-mPIPE buffer
|
||||||
|
* return. The MPIPE_EDMA_INFO.REMOTE_BUFF_RTN_SUPPORT bit indicates
|
||||||
|
* whether the INST field in the buffer descriptor is populated by iDMA
|
||||||
|
* hardware.
|
||||||
*/
|
*/
|
||||||
uint_reg_t inst : 1;
|
uint_reg_t inst : 2;
|
||||||
/** Reserved. */
|
|
||||||
uint_reg_t __reserved_6 : 1;
|
|
||||||
/**
|
/**
|
||||||
* Always set to one by hardware in iDMA packet descriptors. For eDMA,
|
* Always set to one by hardware in iDMA packet descriptors. For eDMA,
|
||||||
* indicates whether the buffer will be released to the buffer stack
|
* indicates whether the buffer will be released to the buffer stack
|
||||||
@ -491,8 +504,7 @@ typedef union
|
|||||||
uint_reg_t c : 2;
|
uint_reg_t c : 2;
|
||||||
uint_reg_t size : 3;
|
uint_reg_t size : 3;
|
||||||
uint_reg_t hwb : 1;
|
uint_reg_t hwb : 1;
|
||||||
uint_reg_t __reserved_6 : 1;
|
uint_reg_t inst : 2;
|
||||||
uint_reg_t inst : 1;
|
|
||||||
uint_reg_t __reserved_5 : 3;
|
uint_reg_t __reserved_5 : 3;
|
||||||
uint_reg_t stack_idx : 5;
|
uint_reg_t stack_idx : 5;
|
||||||
uint_reg_t __reserved_4 : 6;
|
uint_reg_t __reserved_4 : 6;
|
||||||
|
@ -16,21 +16,21 @@
|
|||||||
#ifndef __ARCH_TRIO_CONSTANTS_H__
|
#ifndef __ARCH_TRIO_CONSTANTS_H__
|
||||||
#define __ARCH_TRIO_CONSTANTS_H__
|
#define __ARCH_TRIO_CONSTANTS_H__
|
||||||
|
|
||||||
#define TRIO_NUM_ASIDS 16
|
#define TRIO_NUM_ASIDS 32
|
||||||
#define TRIO_NUM_TLBS_PER_ASID 16
|
#define TRIO_NUM_TLBS_PER_ASID 16
|
||||||
|
|
||||||
#define TRIO_NUM_TPIO_REGIONS 8
|
#define TRIO_NUM_TPIO_REGIONS 8
|
||||||
#define TRIO_LOG2_NUM_TPIO_REGIONS 3
|
#define TRIO_LOG2_NUM_TPIO_REGIONS 3
|
||||||
|
|
||||||
#define TRIO_NUM_MAP_MEM_REGIONS 16
|
#define TRIO_NUM_MAP_MEM_REGIONS 32
|
||||||
#define TRIO_LOG2_NUM_MAP_MEM_REGIONS 4
|
#define TRIO_LOG2_NUM_MAP_MEM_REGIONS 5
|
||||||
#define TRIO_NUM_MAP_SQ_REGIONS 8
|
#define TRIO_NUM_MAP_SQ_REGIONS 8
|
||||||
#define TRIO_LOG2_NUM_MAP_SQ_REGIONS 3
|
#define TRIO_LOG2_NUM_MAP_SQ_REGIONS 3
|
||||||
|
|
||||||
#define TRIO_LOG2_NUM_SQ_FIFO_ENTRIES 6
|
#define TRIO_LOG2_NUM_SQ_FIFO_ENTRIES 6
|
||||||
|
|
||||||
#define TRIO_NUM_PUSH_DMA_RINGS 32
|
#define TRIO_NUM_PUSH_DMA_RINGS 64
|
||||||
|
|
||||||
#define TRIO_NUM_PULL_DMA_RINGS 32
|
#define TRIO_NUM_PULL_DMA_RINGS 64
|
||||||
|
|
||||||
#endif /* __ARCH_TRIO_CONSTANTS_H__ */
|
#endif /* __ARCH_TRIO_CONSTANTS_H__ */
|
||||||
|
@ -182,10 +182,9 @@ static inline __attribute_const__ int get_order(unsigned long size)
|
|||||||
|
|
||||||
#define PAGE_OFFSET (-(_AC(1, UL) << (MAX_VA_WIDTH - 1)))
|
#define PAGE_OFFSET (-(_AC(1, UL) << (MAX_VA_WIDTH - 1)))
|
||||||
#define KERNEL_HIGH_VADDR _AC(0xfffffff800000000, UL) /* high 32GB */
|
#define KERNEL_HIGH_VADDR _AC(0xfffffff800000000, UL) /* high 32GB */
|
||||||
#define FIXADDR_BASE (KERNEL_HIGH_VADDR - 0x400000000) /* 4 GB */
|
#define FIXADDR_BASE (KERNEL_HIGH_VADDR - 0x300000000) /* 4 GB */
|
||||||
#define FIXADDR_TOP (KERNEL_HIGH_VADDR - 0x300000000) /* 4 GB */
|
#define FIXADDR_TOP (KERNEL_HIGH_VADDR - 0x200000000) /* 4 GB */
|
||||||
#define _VMALLOC_START FIXADDR_TOP
|
#define _VMALLOC_START FIXADDR_TOP
|
||||||
#define HUGE_VMAP_BASE (KERNEL_HIGH_VADDR - 0x200000000) /* 4 GB */
|
|
||||||
#define MEM_SV_START (KERNEL_HIGH_VADDR - 0x100000000) /* 256 MB */
|
#define MEM_SV_START (KERNEL_HIGH_VADDR - 0x100000000) /* 256 MB */
|
||||||
#define MEM_MODULE_START (MEM_SV_START + (256*1024*1024)) /* 256 MB */
|
#define MEM_MODULE_START (MEM_SV_START + (256*1024*1024)) /* 256 MB */
|
||||||
#define MEM_MODULE_END (MEM_MODULE_START + (256*1024*1024))
|
#define MEM_MODULE_END (MEM_MODULE_START + (256*1024*1024))
|
||||||
|
@ -55,17 +55,9 @@
|
|||||||
#define PKMAP_BASE ((FIXADDR_BOOT_START - PAGE_SIZE*LAST_PKMAP) & PGDIR_MASK)
|
#define PKMAP_BASE ((FIXADDR_BOOT_START - PAGE_SIZE*LAST_PKMAP) & PGDIR_MASK)
|
||||||
|
|
||||||
#ifdef CONFIG_HIGHMEM
|
#ifdef CONFIG_HIGHMEM
|
||||||
# define __VMAPPING_END (PKMAP_BASE & ~(HPAGE_SIZE-1))
|
# define _VMALLOC_END (PKMAP_BASE & ~(HPAGE_SIZE-1))
|
||||||
#else
|
#else
|
||||||
# define __VMAPPING_END (FIXADDR_START & ~(HPAGE_SIZE-1))
|
# define _VMALLOC_END (FIXADDR_START & ~(HPAGE_SIZE-1))
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_HUGEVMAP
|
|
||||||
#define HUGE_VMAP_END __VMAPPING_END
|
|
||||||
#define HUGE_VMAP_BASE (HUGE_VMAP_END - CONFIG_NR_HUGE_VMAPS * HPAGE_SIZE)
|
|
||||||
#define _VMALLOC_END HUGE_VMAP_BASE
|
|
||||||
#else
|
|
||||||
#define _VMALLOC_END __VMAPPING_END
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -52,12 +52,10 @@
|
|||||||
* memory allocation code). The vmalloc code puts in an internal
|
* memory allocation code). The vmalloc code puts in an internal
|
||||||
* guard page between each allocation.
|
* guard page between each allocation.
|
||||||
*/
|
*/
|
||||||
#define _VMALLOC_END HUGE_VMAP_BASE
|
#define _VMALLOC_END MEM_SV_START
|
||||||
#define VMALLOC_END _VMALLOC_END
|
#define VMALLOC_END _VMALLOC_END
|
||||||
#define VMALLOC_START _VMALLOC_START
|
#define VMALLOC_START _VMALLOC_START
|
||||||
|
|
||||||
#define HUGE_VMAP_END (HUGE_VMAP_BASE + PGDIR_SIZE)
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
/* We have no pud since we are a three-level page table. */
|
/* We have no pud since we are a three-level page table. */
|
||||||
|
@ -56,89 +56,89 @@
|
|||||||
#define GXIO_MPIPE_OP_GET_MMIO_BASE IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8000)
|
#define GXIO_MPIPE_OP_GET_MMIO_BASE IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8000)
|
||||||
#define GXIO_MPIPE_OP_CHECK_MMIO_OFFSET IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8001)
|
#define GXIO_MPIPE_OP_CHECK_MMIO_OFFSET IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8001)
|
||||||
|
|
||||||
int gxio_mpipe_alloc_buffer_stacks(gxio_mpipe_context_t * context,
|
int gxio_mpipe_alloc_buffer_stacks(gxio_mpipe_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
int gxio_mpipe_init_buffer_stack_aux(gxio_mpipe_context_t * context,
|
int gxio_mpipe_init_buffer_stack_aux(gxio_mpipe_context_t *context,
|
||||||
void *mem_va, size_t mem_size,
|
void *mem_va, size_t mem_size,
|
||||||
unsigned int mem_flags, unsigned int stack,
|
unsigned int mem_flags, unsigned int stack,
|
||||||
unsigned int buffer_size_enum);
|
unsigned int buffer_size_enum);
|
||||||
|
|
||||||
|
|
||||||
int gxio_mpipe_alloc_notif_rings(gxio_mpipe_context_t * context,
|
int gxio_mpipe_alloc_notif_rings(gxio_mpipe_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
int gxio_mpipe_init_notif_ring_aux(gxio_mpipe_context_t * context, void *mem_va,
|
int gxio_mpipe_init_notif_ring_aux(gxio_mpipe_context_t *context, void *mem_va,
|
||||||
size_t mem_size, unsigned int mem_flags,
|
size_t mem_size, unsigned int mem_flags,
|
||||||
unsigned int ring);
|
unsigned int ring);
|
||||||
|
|
||||||
int gxio_mpipe_request_notif_ring_interrupt(gxio_mpipe_context_t * context,
|
int gxio_mpipe_request_notif_ring_interrupt(gxio_mpipe_context_t *context,
|
||||||
int inter_x, int inter_y,
|
int inter_x, int inter_y,
|
||||||
int inter_ipi, int inter_event,
|
int inter_ipi, int inter_event,
|
||||||
unsigned int ring);
|
unsigned int ring);
|
||||||
|
|
||||||
int gxio_mpipe_enable_notif_ring_interrupt(gxio_mpipe_context_t * context,
|
int gxio_mpipe_enable_notif_ring_interrupt(gxio_mpipe_context_t *context,
|
||||||
unsigned int ring);
|
unsigned int ring);
|
||||||
|
|
||||||
int gxio_mpipe_alloc_notif_groups(gxio_mpipe_context_t * context,
|
int gxio_mpipe_alloc_notif_groups(gxio_mpipe_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
int gxio_mpipe_init_notif_group(gxio_mpipe_context_t * context,
|
int gxio_mpipe_init_notif_group(gxio_mpipe_context_t *context,
|
||||||
unsigned int group,
|
unsigned int group,
|
||||||
gxio_mpipe_notif_group_bits_t bits);
|
gxio_mpipe_notif_group_bits_t bits);
|
||||||
|
|
||||||
int gxio_mpipe_alloc_buckets(gxio_mpipe_context_t * context, unsigned int count,
|
int gxio_mpipe_alloc_buckets(gxio_mpipe_context_t *context, unsigned int count,
|
||||||
unsigned int first, unsigned int flags);
|
unsigned int first, unsigned int flags);
|
||||||
|
|
||||||
int gxio_mpipe_init_bucket(gxio_mpipe_context_t * context, unsigned int bucket,
|
int gxio_mpipe_init_bucket(gxio_mpipe_context_t *context, unsigned int bucket,
|
||||||
MPIPE_LBL_INIT_DAT_BSTS_TBL_t bucket_info);
|
MPIPE_LBL_INIT_DAT_BSTS_TBL_t bucket_info);
|
||||||
|
|
||||||
int gxio_mpipe_alloc_edma_rings(gxio_mpipe_context_t * context,
|
int gxio_mpipe_alloc_edma_rings(gxio_mpipe_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
int gxio_mpipe_init_edma_ring_aux(gxio_mpipe_context_t * context, void *mem_va,
|
int gxio_mpipe_init_edma_ring_aux(gxio_mpipe_context_t *context, void *mem_va,
|
||||||
size_t mem_size, unsigned int mem_flags,
|
size_t mem_size, unsigned int mem_flags,
|
||||||
unsigned int ring, unsigned int channel);
|
unsigned int ring, unsigned int channel);
|
||||||
|
|
||||||
|
|
||||||
int gxio_mpipe_commit_rules(gxio_mpipe_context_t * context, const void *blob,
|
int gxio_mpipe_commit_rules(gxio_mpipe_context_t *context, const void *blob,
|
||||||
size_t blob_size);
|
size_t blob_size);
|
||||||
|
|
||||||
int gxio_mpipe_register_client_memory(gxio_mpipe_context_t * context,
|
int gxio_mpipe_register_client_memory(gxio_mpipe_context_t *context,
|
||||||
unsigned int iotlb, HV_PTE pte,
|
unsigned int iotlb, HV_PTE pte,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
int gxio_mpipe_link_open_aux(gxio_mpipe_context_t * context,
|
int gxio_mpipe_link_open_aux(gxio_mpipe_context_t *context,
|
||||||
_gxio_mpipe_link_name_t name, unsigned int flags);
|
_gxio_mpipe_link_name_t name, unsigned int flags);
|
||||||
|
|
||||||
int gxio_mpipe_link_close_aux(gxio_mpipe_context_t * context, int mac);
|
int gxio_mpipe_link_close_aux(gxio_mpipe_context_t *context, int mac);
|
||||||
|
|
||||||
int gxio_mpipe_link_set_attr_aux(gxio_mpipe_context_t * context, int mac,
|
int gxio_mpipe_link_set_attr_aux(gxio_mpipe_context_t *context, int mac,
|
||||||
uint32_t attr, int64_t val);
|
uint32_t attr, int64_t val);
|
||||||
|
|
||||||
int gxio_mpipe_get_timestamp_aux(gxio_mpipe_context_t * context, uint64_t * sec,
|
int gxio_mpipe_get_timestamp_aux(gxio_mpipe_context_t *context, uint64_t *sec,
|
||||||
uint64_t * nsec, uint64_t * cycles);
|
uint64_t *nsec, uint64_t *cycles);
|
||||||
|
|
||||||
int gxio_mpipe_set_timestamp_aux(gxio_mpipe_context_t * context, uint64_t sec,
|
int gxio_mpipe_set_timestamp_aux(gxio_mpipe_context_t *context, uint64_t sec,
|
||||||
uint64_t nsec, uint64_t cycles);
|
uint64_t nsec, uint64_t cycles);
|
||||||
|
|
||||||
int gxio_mpipe_adjust_timestamp_aux(gxio_mpipe_context_t * context,
|
int gxio_mpipe_adjust_timestamp_aux(gxio_mpipe_context_t *context,
|
||||||
int64_t nsec);
|
int64_t nsec);
|
||||||
|
|
||||||
int gxio_mpipe_adjust_timestamp_freq(gxio_mpipe_context_t * context,
|
int gxio_mpipe_adjust_timestamp_freq(gxio_mpipe_context_t *context,
|
||||||
int32_t ppb);
|
int32_t ppb);
|
||||||
|
|
||||||
int gxio_mpipe_arm_pollfd(gxio_mpipe_context_t * context, int pollfd_cookie);
|
int gxio_mpipe_arm_pollfd(gxio_mpipe_context_t *context, int pollfd_cookie);
|
||||||
|
|
||||||
int gxio_mpipe_close_pollfd(gxio_mpipe_context_t * context, int pollfd_cookie);
|
int gxio_mpipe_close_pollfd(gxio_mpipe_context_t *context, int pollfd_cookie);
|
||||||
|
|
||||||
int gxio_mpipe_get_mmio_base(gxio_mpipe_context_t * context, HV_PTE *base);
|
int gxio_mpipe_get_mmio_base(gxio_mpipe_context_t *context, HV_PTE *base);
|
||||||
|
|
||||||
int gxio_mpipe_check_mmio_offset(gxio_mpipe_context_t * context,
|
int gxio_mpipe_check_mmio_offset(gxio_mpipe_context_t *context,
|
||||||
unsigned long offset, unsigned long size);
|
unsigned long offset, unsigned long size);
|
||||||
|
|
||||||
#endif /* !__GXIO_MPIPE_LINUX_RPC_H__ */
|
#endif /* !__GXIO_MPIPE_LINUX_RPC_H__ */
|
||||||
|
@ -33,18 +33,18 @@
|
|||||||
#define GXIO_MPIPE_INFO_OP_CHECK_MMIO_OFFSET IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8001)
|
#define GXIO_MPIPE_INFO_OP_CHECK_MMIO_OFFSET IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8001)
|
||||||
|
|
||||||
|
|
||||||
int gxio_mpipe_info_instance_aux(gxio_mpipe_info_context_t * context,
|
int gxio_mpipe_info_instance_aux(gxio_mpipe_info_context_t *context,
|
||||||
_gxio_mpipe_link_name_t name);
|
_gxio_mpipe_link_name_t name);
|
||||||
|
|
||||||
int gxio_mpipe_info_enumerate_aux(gxio_mpipe_info_context_t * context,
|
int gxio_mpipe_info_enumerate_aux(gxio_mpipe_info_context_t *context,
|
||||||
unsigned int idx,
|
unsigned int idx,
|
||||||
_gxio_mpipe_link_name_t * name,
|
_gxio_mpipe_link_name_t *name,
|
||||||
_gxio_mpipe_link_mac_t * mac);
|
_gxio_mpipe_link_mac_t *mac);
|
||||||
|
|
||||||
int gxio_mpipe_info_get_mmio_base(gxio_mpipe_info_context_t * context,
|
int gxio_mpipe_info_get_mmio_base(gxio_mpipe_info_context_t *context,
|
||||||
HV_PTE *base);
|
HV_PTE *base);
|
||||||
|
|
||||||
int gxio_mpipe_info_check_mmio_offset(gxio_mpipe_info_context_t * context,
|
int gxio_mpipe_info_check_mmio_offset(gxio_mpipe_info_context_t *context,
|
||||||
unsigned long offset, unsigned long size);
|
unsigned long offset, unsigned long size);
|
||||||
|
|
||||||
#endif /* !__GXIO_MPIPE_INFO_LINUX_RPC_H__ */
|
#endif /* !__GXIO_MPIPE_INFO_LINUX_RPC_H__ */
|
||||||
|
@ -46,59 +46,59 @@
|
|||||||
#define GXIO_TRIO_OP_GET_MMIO_BASE IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8000)
|
#define GXIO_TRIO_OP_GET_MMIO_BASE IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8000)
|
||||||
#define GXIO_TRIO_OP_CHECK_MMIO_OFFSET IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8001)
|
#define GXIO_TRIO_OP_CHECK_MMIO_OFFSET IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8001)
|
||||||
|
|
||||||
int gxio_trio_alloc_asids(gxio_trio_context_t * context, unsigned int count,
|
int gxio_trio_alloc_asids(gxio_trio_context_t *context, unsigned int count,
|
||||||
unsigned int first, unsigned int flags);
|
unsigned int first, unsigned int flags);
|
||||||
|
|
||||||
|
|
||||||
int gxio_trio_alloc_memory_maps(gxio_trio_context_t * context,
|
int gxio_trio_alloc_memory_maps(gxio_trio_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
|
|
||||||
int gxio_trio_alloc_scatter_queues(gxio_trio_context_t * context,
|
int gxio_trio_alloc_scatter_queues(gxio_trio_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
int gxio_trio_alloc_pio_regions(gxio_trio_context_t * context,
|
int gxio_trio_alloc_pio_regions(gxio_trio_context_t *context,
|
||||||
unsigned int count, unsigned int first,
|
unsigned int count, unsigned int first,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
int gxio_trio_init_pio_region_aux(gxio_trio_context_t * context,
|
int gxio_trio_init_pio_region_aux(gxio_trio_context_t *context,
|
||||||
unsigned int pio_region, unsigned int mac,
|
unsigned int pio_region, unsigned int mac,
|
||||||
uint32_t bus_address_hi, unsigned int flags);
|
uint32_t bus_address_hi, unsigned int flags);
|
||||||
|
|
||||||
|
|
||||||
int gxio_trio_init_memory_map_mmu_aux(gxio_trio_context_t * context,
|
int gxio_trio_init_memory_map_mmu_aux(gxio_trio_context_t *context,
|
||||||
unsigned int map, unsigned long va,
|
unsigned int map, unsigned long va,
|
||||||
uint64_t size, unsigned int asid,
|
uint64_t size, unsigned int asid,
|
||||||
unsigned int mac, uint64_t bus_address,
|
unsigned int mac, uint64_t bus_address,
|
||||||
unsigned int node,
|
unsigned int node,
|
||||||
unsigned int order_mode);
|
unsigned int order_mode);
|
||||||
|
|
||||||
int gxio_trio_get_port_property(gxio_trio_context_t * context,
|
int gxio_trio_get_port_property(gxio_trio_context_t *context,
|
||||||
struct pcie_trio_ports_property *trio_ports);
|
struct pcie_trio_ports_property *trio_ports);
|
||||||
|
|
||||||
int gxio_trio_config_legacy_intr(gxio_trio_context_t * context, int inter_x,
|
int gxio_trio_config_legacy_intr(gxio_trio_context_t *context, int inter_x,
|
||||||
int inter_y, int inter_ipi, int inter_event,
|
int inter_y, int inter_ipi, int inter_event,
|
||||||
unsigned int mac, unsigned int intx);
|
unsigned int mac, unsigned int intx);
|
||||||
|
|
||||||
int gxio_trio_config_msi_intr(gxio_trio_context_t * context, int inter_x,
|
int gxio_trio_config_msi_intr(gxio_trio_context_t *context, int inter_x,
|
||||||
int inter_y, int inter_ipi, int inter_event,
|
int inter_y, int inter_ipi, int inter_event,
|
||||||
unsigned int mac, unsigned int mem_map,
|
unsigned int mac, unsigned int mem_map,
|
||||||
uint64_t mem_map_base, uint64_t mem_map_limit,
|
uint64_t mem_map_base, uint64_t mem_map_limit,
|
||||||
unsigned int asid);
|
unsigned int asid);
|
||||||
|
|
||||||
|
|
||||||
int gxio_trio_set_mps_mrs(gxio_trio_context_t * context, uint16_t mps,
|
int gxio_trio_set_mps_mrs(gxio_trio_context_t *context, uint16_t mps,
|
||||||
uint16_t mrs, unsigned int mac);
|
uint16_t mrs, unsigned int mac);
|
||||||
|
|
||||||
int gxio_trio_force_rc_link_up(gxio_trio_context_t * context, unsigned int mac);
|
int gxio_trio_force_rc_link_up(gxio_trio_context_t *context, unsigned int mac);
|
||||||
|
|
||||||
int gxio_trio_force_ep_link_up(gxio_trio_context_t * context, unsigned int mac);
|
int gxio_trio_force_ep_link_up(gxio_trio_context_t *context, unsigned int mac);
|
||||||
|
|
||||||
int gxio_trio_get_mmio_base(gxio_trio_context_t * context, HV_PTE *base);
|
int gxio_trio_get_mmio_base(gxio_trio_context_t *context, HV_PTE *base);
|
||||||
|
|
||||||
int gxio_trio_check_mmio_offset(gxio_trio_context_t * context,
|
int gxio_trio_check_mmio_offset(gxio_trio_context_t *context,
|
||||||
unsigned long offset, unsigned long size);
|
unsigned long offset, unsigned long size);
|
||||||
|
|
||||||
#endif /* !__GXIO_TRIO_LINUX_RPC_H__ */
|
#endif /* !__GXIO_TRIO_LINUX_RPC_H__ */
|
||||||
|
@ -31,16 +31,16 @@
|
|||||||
#define GXIO_USB_HOST_OP_GET_MMIO_BASE IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8000)
|
#define GXIO_USB_HOST_OP_GET_MMIO_BASE IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8000)
|
||||||
#define GXIO_USB_HOST_OP_CHECK_MMIO_OFFSET IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8001)
|
#define GXIO_USB_HOST_OP_CHECK_MMIO_OFFSET IORPC_OPCODE(IORPC_FORMAT_NONE_NOUSER, 0x8001)
|
||||||
|
|
||||||
int gxio_usb_host_cfg_interrupt(gxio_usb_host_context_t * context, int inter_x,
|
int gxio_usb_host_cfg_interrupt(gxio_usb_host_context_t *context, int inter_x,
|
||||||
int inter_y, int inter_ipi, int inter_event);
|
int inter_y, int inter_ipi, int inter_event);
|
||||||
|
|
||||||
int gxio_usb_host_register_client_memory(gxio_usb_host_context_t * context,
|
int gxio_usb_host_register_client_memory(gxio_usb_host_context_t *context,
|
||||||
HV_PTE pte, unsigned int flags);
|
HV_PTE pte, unsigned int flags);
|
||||||
|
|
||||||
int gxio_usb_host_get_mmio_base(gxio_usb_host_context_t * context,
|
int gxio_usb_host_get_mmio_base(gxio_usb_host_context_t *context,
|
||||||
HV_PTE *base);
|
HV_PTE *base);
|
||||||
|
|
||||||
int gxio_usb_host_check_mmio_offset(gxio_usb_host_context_t * context,
|
int gxio_usb_host_check_mmio_offset(gxio_usb_host_context_t *context,
|
||||||
unsigned long offset, unsigned long size);
|
unsigned long offset, unsigned long size);
|
||||||
|
|
||||||
#endif /* !__GXIO_USB_HOST_LINUX_RPC_H__ */
|
#endif /* !__GXIO_USB_HOST_LINUX_RPC_H__ */
|
||||||
|
@ -53,7 +53,7 @@ typedef struct {
|
|||||||
* @return Zero if the context was successfully initialized, else a
|
* @return Zero if the context was successfully initialized, else a
|
||||||
* GXIO_ERR_xxx error code.
|
* GXIO_ERR_xxx error code.
|
||||||
*/
|
*/
|
||||||
extern int gxio_usb_host_init(gxio_usb_host_context_t * context, int usb_index,
|
extern int gxio_usb_host_init(gxio_usb_host_context_t *context, int usb_index,
|
||||||
int is_ehci);
|
int is_ehci);
|
||||||
|
|
||||||
/* Destroy a USB context.
|
/* Destroy a USB context.
|
||||||
@ -68,20 +68,20 @@ extern int gxio_usb_host_init(gxio_usb_host_context_t * context, int usb_index,
|
|||||||
* @return Zero if the context was successfully destroyed, else a
|
* @return Zero if the context was successfully destroyed, else a
|
||||||
* GXIO_ERR_xxx error code.
|
* GXIO_ERR_xxx error code.
|
||||||
*/
|
*/
|
||||||
extern int gxio_usb_host_destroy(gxio_usb_host_context_t * context);
|
extern int gxio_usb_host_destroy(gxio_usb_host_context_t *context);
|
||||||
|
|
||||||
/* Retrieve the address of the shim's MMIO registers.
|
/* Retrieve the address of the shim's MMIO registers.
|
||||||
*
|
*
|
||||||
* @param context Pointer to a properly initialized gxio_usb_host_context_t.
|
* @param context Pointer to a properly initialized gxio_usb_host_context_t.
|
||||||
* @return The address of the shim's MMIO registers.
|
* @return The address of the shim's MMIO registers.
|
||||||
*/
|
*/
|
||||||
extern void *gxio_usb_host_get_reg_start(gxio_usb_host_context_t * context);
|
extern void *gxio_usb_host_get_reg_start(gxio_usb_host_context_t *context);
|
||||||
|
|
||||||
/* Retrieve the length of the shim's MMIO registers.
|
/* Retrieve the length of the shim's MMIO registers.
|
||||||
*
|
*
|
||||||
* @param context Pointer to a properly initialized gxio_usb_host_context_t.
|
* @param context Pointer to a properly initialized gxio_usb_host_context_t.
|
||||||
* @return The length of the shim's MMIO registers.
|
* @return The length of the shim's MMIO registers.
|
||||||
*/
|
*/
|
||||||
extern size_t gxio_usb_host_get_reg_len(gxio_usb_host_context_t * context);
|
extern size_t gxio_usb_host_get_reg_len(gxio_usb_host_context_t *context);
|
||||||
|
|
||||||
#endif /* _GXIO_USB_H_ */
|
#endif /* _GXIO_USB_H_ */
|
||||||
|
@ -84,7 +84,7 @@ COMPAT_SYSCALL_DEFINE5(llseek, unsigned int, fd, unsigned int, offset_high,
|
|||||||
{
|
{
|
||||||
return sys_llseek(fd, offset_high, offset_low, result, origin);
|
return sys_llseek(fd, offset_high, offset_low, result, origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Provide the compat syscall number to call mapping. */
|
/* Provide the compat syscall number to call mapping. */
|
||||||
#undef __SYSCALL
|
#undef __SYSCALL
|
||||||
#define __SYSCALL(nr, call) [nr] = (call),
|
#define __SYSCALL(nr, call) [nr] = (call),
|
||||||
|
@ -1,55 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2011 Tilera Corporation. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation, version 2.
|
|
||||||
*
|
|
||||||
* 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, GOOD TITLE or
|
|
||||||
* NON INFRINGEMENT. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* Atomically access user memory, but use MMU to avoid propagating
|
|
||||||
* kernel exceptions.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
|
||||||
#include <asm/errno.h>
|
|
||||||
#include <asm/futex.h>
|
|
||||||
#include <asm/page.h>
|
|
||||||
#include <asm/processor.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Provide a set of atomic memory operations supporting <asm/futex.h>.
|
|
||||||
*
|
|
||||||
* r0: user address to manipulate
|
|
||||||
* r1: new value to write, or for cmpxchg, old value to compare against
|
|
||||||
* r2: (cmpxchg only) new value to write
|
|
||||||
*
|
|
||||||
* Return __get_user struct, r0 with value, r1 with error.
|
|
||||||
*/
|
|
||||||
#define FUTEX_OP(name, ...) \
|
|
||||||
STD_ENTRY(futex_##name) \
|
|
||||||
__VA_ARGS__; \
|
|
||||||
{ \
|
|
||||||
move r1, zero; \
|
|
||||||
jrp lr \
|
|
||||||
}; \
|
|
||||||
STD_ENDPROC(futex_##name); \
|
|
||||||
.pushsection __ex_table,"a"; \
|
|
||||||
.quad 1b, get_user_fault; \
|
|
||||||
.popsection
|
|
||||||
|
|
||||||
.pushsection .fixup,"ax"
|
|
||||||
get_user_fault:
|
|
||||||
{ movei r1, -EFAULT; jrp lr }
|
|
||||||
ENDPROC(get_user_fault)
|
|
||||||
.popsection
|
|
||||||
|
|
||||||
FUTEX_OP(cmpxchg, mtspr CMPEXCH_VALUE, r1; 1: cmpexch4 r0, r0, r2)
|
|
||||||
FUTEX_OP(set, 1: exch4 r0, r0, r1)
|
|
||||||
FUTEX_OP(add, 1: fetchadd4 r0, r0, r1)
|
|
||||||
FUTEX_OP(or, 1: fetchor4 r0, r0, r1)
|
|
||||||
FUTEX_OP(andn, nor r1, r1, zero; 1: fetchand4 r0, r0, r1)
|
|
@ -1268,8 +1268,7 @@ static void __init validate_va(void)
|
|||||||
if ((long)VMALLOC_START >= 0)
|
if ((long)VMALLOC_START >= 0)
|
||||||
early_panic(
|
early_panic(
|
||||||
"Linux VMALLOC region below the 2GB line (%#lx)!\n"
|
"Linux VMALLOC region below the 2GB line (%#lx)!\n"
|
||||||
"Reconfigure the kernel with fewer NR_HUGE_VMAPS\n"
|
"Reconfigure the kernel with smaller VMALLOC_RESERVE.\n",
|
||||||
"or smaller VMALLOC_RESERVE.\n",
|
|
||||||
VMALLOC_START);
|
VMALLOC_START);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -551,8 +551,8 @@ static tilegx_bundle_bits jit_x1_bnezt(int ra, int broff)
|
|||||||
/*
|
/*
|
||||||
* This function generates unalign fixup JIT.
|
* This function generates unalign fixup JIT.
|
||||||
*
|
*
|
||||||
* We fist find unalign load/store instruction's destination, source
|
* We first find unalign load/store instruction's destination, source
|
||||||
* reguisters: ra, rb and rd. and 3 scratch registers by calling
|
* registers: ra, rb and rd. and 3 scratch registers by calling
|
||||||
* find_regs(...). 3 scratch clobbers should not alias with any register
|
* find_regs(...). 3 scratch clobbers should not alias with any register
|
||||||
* used in the fault bundle. Then analyze the fault bundle to determine
|
* used in the fault bundle. Then analyze the fault bundle to determine
|
||||||
* if it's a load or store, operand width, branch or address increment etc.
|
* if it's a load or store, operand width, branch or address increment etc.
|
||||||
|
@ -149,8 +149,6 @@ static inline int vmalloc_fault(pgd_t *pgd, unsigned long address)
|
|||||||
pmd_k = vmalloc_sync_one(pgd, address);
|
pmd_k = vmalloc_sync_one(pgd, address);
|
||||||
if (!pmd_k)
|
if (!pmd_k)
|
||||||
return -1;
|
return -1;
|
||||||
if (pmd_huge(*pmd_k))
|
|
||||||
return 0; /* support TILE huge_vmap() API */
|
|
||||||
pte_k = pte_offset_kernel(pmd_k, address);
|
pte_k = pte_offset_kernel(pmd_k, address);
|
||||||
if (!pte_present(*pte_k))
|
if (!pte_present(*pte_k))
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -827,10 +827,6 @@ void __init mem_init(void)
|
|||||||
FIXADDR_START, FIXADDR_TOP + PAGE_SIZE - 1);
|
FIXADDR_START, FIXADDR_TOP + PAGE_SIZE - 1);
|
||||||
printk(KERN_DEBUG " PKMAP %#lx - %#lx\n",
|
printk(KERN_DEBUG " PKMAP %#lx - %#lx\n",
|
||||||
PKMAP_BASE, PKMAP_ADDR(LAST_PKMAP) - 1);
|
PKMAP_BASE, PKMAP_ADDR(LAST_PKMAP) - 1);
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_HUGEVMAP
|
|
||||||
printk(KERN_DEBUG " HUGEMAP %#lx - %#lx\n",
|
|
||||||
HUGE_VMAP_BASE, HUGE_VMAP_END - 1);
|
|
||||||
#endif
|
#endif
|
||||||
printk(KERN_DEBUG " VMALLOC %#lx - %#lx\n",
|
printk(KERN_DEBUG " VMALLOC %#lx - %#lx\n",
|
||||||
_VMALLOC_START, _VMALLOC_END - 1);
|
_VMALLOC_START, _VMALLOC_END - 1);
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user