Linux 4.13-rc4
-----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJZh8YYAAoJEHm+PkMAQRiG46QIAKOBbLlOY38zIJwDfJs6ydvH eFLryznS7RM2w0Gw1RyVAyWS43QS9RUNGDMa4UOb9AvurBHYpK29t1uq6LejQ/hn 2Uvxuq95qEVVYzN1OA3WzLKUa35g3qRM9rTYFz7xGMRp2Ldk/aPRi/PVJLhSO3YQ HFRLsfNMWTkSR4imuxm7NS+cYMcqWbDbanvW5IwQ+RFRPo8Ac1PbFpGUdVtar6+O Fm3GLBsRB3dijJwYyWQKeDvtLr608i50by4yS7EIAqbUSfoDpJEyTL57oTCRok7P 5ZycGpK4bXWF0OpBWpKgrFO5tB7xfzUDa3TmNhS3Q8ep4KLHNXwM3V6p8Y+YZco= =FId5 -----END PGP SIGNATURE----- Merge tag 'v4.13-rc4' into patchwork Linux 4.13-rc4 * tag 'v4.13-rc4': (863 commits) Linux 4.13-rc4 Fix compat_sys_sigpending breakage ext4: fix copy paste error in ext4_swap_extents() ext4: fix overflow caused by missing cast in ext4_resize_fs() ext4, project: expand inode extra size if possible ext4: cleanup ext4_expand_extra_isize_ea() ext4: restructure ext4_expand_extra_isize ext4: fix forgetten xattr lock protection in ext4_expand_extra_isize ext4: make xattr inode reads faster ext4: inplace xattr block update fails to deduplicate blocks ext4: remove unused mode parameter ext4: fix warning about stack corruption ext4: fix dir_nlink behaviour ext4: silence array overflow warning ext4: fix SEEK_HOLE/SEEK_DATA for blocksize < pagesize platform/x86: intel-vbtn: match power button on press rather than release ext4: release discard bio after sending discard commands sparc64: Fix exception handling in UltraSPARC-III memcpy. arm64: avoid overflow in VA_START and PAGE_OFFSET arm64: Fix potential race with hardware DBM in ptep_set_access_flags() ...
This commit is contained in:
commit
1d54267b23
949 changed files with 16219 additions and 7254 deletions
|
@ -237,6 +237,14 @@ are the following:
|
|||
This attribute is not present if the scaling driver in use does not
|
||||
support it.
|
||||
|
||||
``cpuinfo_cur_freq``
|
||||
Current frequency of the CPUs belonging to this policy as obtained from
|
||||
the hardware (in KHz).
|
||||
|
||||
This is expected to be the frequency the hardware actually runs at.
|
||||
If that frequency cannot be determined, this attribute should not
|
||||
be present.
|
||||
|
||||
``cpuinfo_max_freq``
|
||||
Maximum possible operating frequency the CPUs belonging to this policy
|
||||
can run at (in kHz).
|
||||
|
|
|
@ -343,3 +343,4 @@ Version History
|
|||
1.11.0 Fix table line argument order
|
||||
(wrong raid10_copies/raid10_format sequence)
|
||||
1.11.1 Add raid4/5/6 journal write-back support via journal_mode option
|
||||
1.12.1 fix for MD deadlock between mddev_suspend() and md_write_start() available
|
||||
|
|
|
@ -1,14 +1,22 @@
|
|||
* Renesas R-Car SATA
|
||||
|
||||
Required properties:
|
||||
- compatible : should contain one of the following:
|
||||
- compatible : should contain one or more of the following:
|
||||
- "renesas,sata-r8a7779" for R-Car H1
|
||||
("renesas,rcar-sata" is deprecated)
|
||||
- "renesas,sata-r8a7790-es1" for R-Car H2 ES1
|
||||
- "renesas,sata-r8a7790" for R-Car H2 other than ES1
|
||||
- "renesas,sata-r8a7791" for R-Car M2-W
|
||||
- "renesas,sata-r8a7793" for R-Car M2-N
|
||||
- "renesas,sata-r8a7795" for R-Car H3
|
||||
- "renesas,rcar-gen2-sata" for a generic R-Car Gen2 compatible device
|
||||
- "renesas,rcar-gen3-sata" for a generic R-Car Gen3 compatible device
|
||||
- "renesas,rcar-sata" is deprecated
|
||||
|
||||
When compatible with the generic version nodes
|
||||
must list the SoC-specific version corresponding
|
||||
to the platform first followed by the generic
|
||||
version.
|
||||
|
||||
- reg : address and length of the SATA registers;
|
||||
- interrupts : must consist of one interrupt specifier.
|
||||
- clocks : must contain a reference to the functional clock.
|
||||
|
@ -16,7 +24,7 @@ Required properties:
|
|||
Example:
|
||||
|
||||
sata0: sata@ee300000 {
|
||||
compatible = "renesas,sata-r8a7791";
|
||||
compatible = "renesas,sata-r8a7791", "renesas,rcar-gen2-sata";
|
||||
reg = <0 0xee300000 0 0x2000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
|
|
@ -8,7 +8,6 @@ Required properties:
|
|||
|
||||
Optional properties:
|
||||
- clocks: Reference to the crypto engine clock.
|
||||
- dma-mask: The address mask limitation. Defaults to 64.
|
||||
|
||||
Example:
|
||||
|
||||
|
@ -24,6 +23,5 @@ Example:
|
|||
interrupt-names = "mem", "ring0", "ring1", "ring2", "ring3",
|
||||
"eip";
|
||||
clocks = <&cpm_syscon0 1 26>;
|
||||
dma-mask = <0xff 0xffffffff>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
|
5
Documentation/devicetree/bindings/gpio/gpio-exar.txt
Normal file
5
Documentation/devicetree/bindings/gpio/gpio-exar.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
Exportable MPIO interface of Exar UART chips
|
||||
|
||||
Required properties of the device:
|
||||
- exar,first-pin: first exportable pins (0..15)
|
||||
- ngpios: number of exportable pins (1..16)
|
|
@ -40,7 +40,7 @@ Optional properties:
|
|||
Example for a Mali-T760:
|
||||
|
||||
gpu@ffa30000 {
|
||||
compatible = "rockchip,rk3288-mali", "arm,mali-t760", "arm,mali-midgard";
|
||||
compatible = "rockchip,rk3288-mali", "arm,mali-t760";
|
||||
reg = <0xffa30000 0x10000>;
|
||||
interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
|
||||
|
|
|
@ -78,7 +78,6 @@ Example:
|
|||
};
|
||||
|
||||
dwmmc0@12200000 {
|
||||
num-slots = <1>;
|
||||
cap-mmc-highspeed;
|
||||
cap-sd-highspeed;
|
||||
broken-cd;
|
||||
|
|
|
@ -24,6 +24,5 @@ Example:
|
|||
|
||||
fifo-depth = <0x20>;
|
||||
bus-width = <4>;
|
||||
num-slots = <1>;
|
||||
disable-wp;
|
||||
};
|
||||
|
|
|
@ -36,7 +36,6 @@ Example:
|
|||
|
||||
/* Board portion */
|
||||
dwmmc0@fcd03000 {
|
||||
num-slots = <1>;
|
||||
vmmc-supply = <&ldo12>;
|
||||
fifo-depth = <0x100>;
|
||||
pinctrl-names = "default";
|
||||
|
@ -52,7 +51,6 @@ Example:
|
|||
|
||||
dwmmc_1: dwmmc1@f723e000 {
|
||||
compatible = "hisilicon,hi6220-dw-mshc";
|
||||
num-slots = <0x1>;
|
||||
bus-width = <0x4>;
|
||||
disable-wp;
|
||||
cap-sd-highspeed;
|
||||
|
|
|
@ -12,12 +12,12 @@ Required Properties:
|
|||
* #address-cells: should be 1.
|
||||
* #size-cells: should be 0.
|
||||
|
||||
# Slots: The slot specific information are contained within child-nodes with
|
||||
each child-node representing a supported slot. There should be atleast one
|
||||
child node representing a card slot. The name of the child node representing
|
||||
the slot is recommended to be slot@n where n is the unique number of the slot
|
||||
connected to the controller. The following are optional properties which
|
||||
can be included in the slot child node.
|
||||
# Slots (DEPRECATED): The slot specific information are contained within
|
||||
child-nodes with each child-node representing a supported slot. There should
|
||||
be atleast one child node representing a card slot. The name of the child node
|
||||
representing the slot is recommended to be slot@n where n is the unique number
|
||||
of the slot connected to the controller. The following are optional properties
|
||||
which can be included in the slot child node.
|
||||
|
||||
* reg: specifies the physical slot number. The valid values of this
|
||||
property is 0 to (num-slots -1), where num-slots is the value
|
||||
|
@ -63,7 +63,7 @@ Optional properties:
|
|||
clock(cclk_out). If it's not specified, max is 200MHZ and min is 400KHz by default.
|
||||
(Use the "max-frequency" instead of "clock-freq-min-max".)
|
||||
|
||||
* num-slots: specifies the number of slots supported by the controller.
|
||||
* num-slots (DEPRECATED): specifies the number of slots supported by the controller.
|
||||
The number of physical slots actually used could be equal or less than the
|
||||
value specified by num-slots. If this property is not specified, the value
|
||||
of num-slot property is assumed to be 1.
|
||||
|
@ -124,7 +124,6 @@ board specific portions as listed below.
|
|||
dwmmc0@12200000 {
|
||||
clock-frequency = <400000000>;
|
||||
clock-freq-min-max = <400000 200000000>;
|
||||
num-slots = <1>;
|
||||
broken-cd;
|
||||
fifo-depth = <0x80>;
|
||||
card-detect-delay = <200>;
|
||||
|
@ -139,7 +138,6 @@ board specific portions as listed below.
|
|||
dwmmc0@12200000 {
|
||||
clock-frequency = <400000000>;
|
||||
clock-freq-min-max = <400000 200000000>;
|
||||
num-slots = <1>;
|
||||
broken-cd;
|
||||
fifo-depth = <0x80>;
|
||||
card-detect-delay = <200>;
|
||||
|
|
|
@ -25,7 +25,6 @@ Example:
|
|||
clock-frequency = <50000000>;
|
||||
clocks = <&topcrm SD0_AHB>, <&topcrm SD0_WCLK>;
|
||||
clock-names = "biu", "ciu";
|
||||
num-slots = <1>;
|
||||
max-frequency = <50000000>;
|
||||
cap-sdio-irq;
|
||||
cap-sd-highspeed;
|
||||
|
|
|
@ -11,6 +11,7 @@ Required properties:
|
|||
- reg-names: Names of the registers.
|
||||
"amac_base": Address and length of the GMAC registers
|
||||
"idm_base": Address and length of the GMAC IDM registers
|
||||
(required for NSP and Northstar2)
|
||||
"nicpm_base": Address and length of the NIC Port Manager
|
||||
registers (required for Northstar2)
|
||||
- interrupts: Interrupt number
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
Broadcom GMAC Ethernet Controller Device Tree Bindings
|
||||
-------------------------------------------------------------
|
||||
|
||||
Required properties:
|
||||
- compatible: "brcm,bgmac-nsp"
|
||||
- reg: Address and length of the GMAC registers,
|
||||
Address and length of the GMAC IDM registers
|
||||
- reg-names: Names of the registers. Must have both "gmac_base" and
|
||||
"idm_base"
|
||||
- interrupts: Interrupt number
|
||||
|
||||
Optional properties:
|
||||
- mac-address: See ethernet.txt file in the same directory
|
||||
|
||||
Examples:
|
||||
|
||||
gmac0: ethernet@18022000 {
|
||||
compatible = "brcm,bgmac-nsp";
|
||||
reg = <0x18022000 0x1000>,
|
||||
<0x18110000 0x1000>;
|
||||
reg-names = "gmac_base", "idm_base";
|
||||
interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
};
|
|
@ -4,7 +4,7 @@ Required properties:
|
|||
- compatible: Should be one of the following.
|
||||
- "rockchip,rk3066a-efuse" - for RK3066a SoCs.
|
||||
- "rockchip,rk3188-efuse" - for RK3188 SoCs.
|
||||
- "rockchip,rk322x-efuse" - for RK322x SoCs.
|
||||
- "rockchip,rk3228-efuse" - for RK3228 SoCs.
|
||||
- "rockchip,rk3288-efuse" - for RK3288 SoCs.
|
||||
- "rockchip,rk3399-efuse" - for RK3399 SoCs.
|
||||
- reg: Should contain the registers location and exact eFuse size
|
||||
|
|
|
@ -1,13 +1,20 @@
|
|||
* Broadcom Digital Timing Engine(DTE) based PTP clock driver
|
||||
* Broadcom Digital Timing Engine(DTE) based PTP clock
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "brcm,ptp-dte"
|
||||
- compatible: should contain the core compatibility string
|
||||
and the SoC compatibility string. The SoC
|
||||
compatibility string is to handle SoC specific
|
||||
hardware differences.
|
||||
Core compatibility string:
|
||||
"brcm,ptp-dte"
|
||||
SoC compatibility strings:
|
||||
"brcm,iproc-ptp-dte" - for iproc based SoC's
|
||||
- reg: address and length of the DTE block's NCO registers
|
||||
|
||||
Example:
|
||||
|
||||
ptp_dte: ptp_dte@180af650 {
|
||||
compatible = "brcm,ptp-dte";
|
||||
ptp: ptp-dte@180af650 {
|
||||
compatible = "brcm,iproc-ptp-dte", "brcm,ptp-dte";
|
||||
reg = <0x180af650 0x10>;
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -9,7 +9,6 @@ Optional properties:
|
|||
- fsl,irda-mode : Indicate the uart supports irda mode
|
||||
- fsl,dte-mode : Indicate the uart works in DTE mode. The uart works
|
||||
in DCE mode by default.
|
||||
- fsl,dma-size : Indicate the size of the DMA buffer and its periods
|
||||
|
||||
Please check Documentation/devicetree/bindings/serial/serial.txt
|
||||
for the complete list of generic properties.
|
||||
|
@ -29,5 +28,4 @@ uart1: serial@73fbc000 {
|
|||
interrupts = <31>;
|
||||
uart-has-rtscts;
|
||||
fsl,dte-mode;
|
||||
fsl,dma-size = <1024 4>;
|
||||
};
|
||||
|
|
|
@ -435,7 +435,8 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
|
|||
PM status to 'suspended' and update its parent's counter of 'active'
|
||||
children as appropriate (it is only valid to use this function if
|
||||
'power.runtime_error' is set or 'power.disable_depth' is greater than
|
||||
zero)
|
||||
zero); it will fail and return an error code if the device has a child
|
||||
which is active and the 'power.ignore_children' flag is unset
|
||||
|
||||
bool pm_runtime_active(struct device *dev);
|
||||
- return true if the device's runtime PM status is 'active' or its
|
||||
|
|
5126
MAINTAINERS
5126
MAINTAINERS
File diff suppressed because it is too large
Load diff
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 4
|
||||
PATCHLEVEL = 13
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc1
|
||||
EXTRAVERSION = -rc4
|
||||
NAME = Fearless Coyote
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -100,7 +100,7 @@
|
|||
#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */
|
||||
#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */
|
||||
#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */
|
||||
#define TIOCGPTPEER _IOR('T', 0x41, int) /* Safely open the slave */
|
||||
#define TIOCGPTPEER _IO('T', 0x41) /* Safely open the slave */
|
||||
|
||||
#define TIOCSERCONFIG 0x5453
|
||||
#define TIOCSERGWILD 0x5454
|
||||
|
|
|
@ -117,7 +117,7 @@ static int arc_dma_mmap(struct device *dev, struct vm_area_struct *vma,
|
|||
|
||||
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||
|
||||
if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
return ret;
|
||||
|
||||
if (off < count && user_count <= (count - off)) {
|
||||
|
|
|
@ -380,7 +380,7 @@ config ARCH_EP93XX
|
|||
bool "EP93xx-based"
|
||||
select ARCH_HAS_HOLES_MEMORYMODEL
|
||||
select ARM_AMBA
|
||||
select ARM_PATCH_PHYS_VIRT
|
||||
imply ARM_PATCH_PHYS_VIRT
|
||||
select ARM_VIC
|
||||
select AUTO_ZRELADDR
|
||||
select CLKDEV_LOOKUP
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pca0_pins>;
|
||||
interrupt-parent = <&gpio0>;
|
||||
interrupts = <18 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupts = <18 IRQ_TYPE_LEVEL_LOW>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
|
@ -87,7 +87,7 @@
|
|||
compatible = "nxp,pca9555";
|
||||
pinctrl-names = "default";
|
||||
interrupt-parent = <&gpio0>;
|
||||
interrupts = <18 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupts = <18 IRQ_TYPE_LEVEL_LOW>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
|
|
|
@ -301,25 +301,4 @@
|
|||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&vpif_capture_pins>, <&vpif_display_pins>;
|
||||
status = "okay";
|
||||
|
||||
/* VPIF capture port */
|
||||
port@0 {
|
||||
vpif_input_ch0: endpoint@0 {
|
||||
reg = <0>;
|
||||
bus-width = <8>;
|
||||
};
|
||||
|
||||
vpif_input_ch1: endpoint@1 {
|
||||
reg = <1>;
|
||||
bus-width = <8>;
|
||||
data-shift = <8>;
|
||||
};
|
||||
};
|
||||
|
||||
/* VPIF display port */
|
||||
port@1 {
|
||||
vpif_output_ch0: endpoint {
|
||||
bus-width = <8>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -318,11 +318,4 @@
|
|||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&vpif_capture_pins>;
|
||||
status = "okay";
|
||||
|
||||
/* VPIF capture port */
|
||||
port {
|
||||
vpif_ch0: endpoint {
|
||||
bus-width = <8>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -68,6 +68,34 @@
|
|||
DM816X_IOPAD(0x0d08, MUX_MODE0) /* USB1_DRVVBUS */
|
||||
>;
|
||||
};
|
||||
|
||||
nandflash_pins: nandflash_pins {
|
||||
pinctrl-single,pins = <
|
||||
DM816X_IOPAD(0x0b38, PULL_UP | MUX_MODE0) /* PINCTRL207 GPMC_CS0*/
|
||||
DM816X_IOPAD(0x0b60, PULL_ENA | MUX_MODE0) /* PINCTRL217 GPMC_ADV_ALE */
|
||||
DM816X_IOPAD(0x0b54, PULL_UP | PULL_ENA | MUX_MODE0) /* PINCTRL214 GPMC_OE_RE */
|
||||
DM816X_IOPAD(0x0b58, PULL_ENA | MUX_MODE0) /* PINCTRL215 GPMC_BE0_CLE */
|
||||
DM816X_IOPAD(0x0b50, PULL_UP | MUX_MODE0) /* PINCTRL213 GPMC_WE */
|
||||
DM816X_IOPAD(0x0b6c, MUX_MODE0) /* PINCTRL220 GPMC_WAIT */
|
||||
DM816X_IOPAD(0x0be4, PULL_ENA | MUX_MODE0) /* PINCTRL250 GPMC_CLK */
|
||||
DM816X_IOPAD(0x0ba4, MUX_MODE0) /* PINCTRL234 GPMC_D0 */
|
||||
DM816X_IOPAD(0x0ba8, MUX_MODE0) /* PINCTRL234 GPMC_D1 */
|
||||
DM816X_IOPAD(0x0bac, MUX_MODE0) /* PINCTRL234 GPMC_D2 */
|
||||
DM816X_IOPAD(0x0bb0, MUX_MODE0) /* PINCTRL234 GPMC_D3 */
|
||||
DM816X_IOPAD(0x0bb4, MUX_MODE0) /* PINCTRL234 GPMC_D4 */
|
||||
DM816X_IOPAD(0x0bb8, MUX_MODE0) /* PINCTRL234 GPMC_D5 */
|
||||
DM816X_IOPAD(0x0bbc, MUX_MODE0) /* PINCTRL234 GPMC_D6 */
|
||||
DM816X_IOPAD(0x0bc0, MUX_MODE0) /* PINCTRL234 GPMC_D7 */
|
||||
DM816X_IOPAD(0x0bc4, MUX_MODE0) /* PINCTRL234 GPMC_D8 */
|
||||
DM816X_IOPAD(0x0bc8, MUX_MODE0) /* PINCTRL234 GPMC_D9 */
|
||||
DM816X_IOPAD(0x0bcc, MUX_MODE0) /* PINCTRL234 GPMC_D10 */
|
||||
DM816X_IOPAD(0x0bd0, MUX_MODE0) /* PINCTRL234 GPMC_D11 */
|
||||
DM816X_IOPAD(0x0bd4, MUX_MODE0) /* PINCTRL234 GPMC_D12 */
|
||||
DM816X_IOPAD(0x0bd8, MUX_MODE0) /* PINCTRL234 GPMC_D13 */
|
||||
DM816X_IOPAD(0x0bdc, MUX_MODE0) /* PINCTRL234 GPMC_D14 */
|
||||
DM816X_IOPAD(0x0be0, MUX_MODE0) /* PINCTRL234 GPMC_D15 */
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
|
@ -90,6 +118,8 @@
|
|||
|
||||
&gpmc {
|
||||
ranges = <0 0 0x04000000 0x01000000>; /* CS0: 16MB for NAND */
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&nandflash_pins>;
|
||||
|
||||
nand@0,0 {
|
||||
compatible = "ti,omap2-nand";
|
||||
|
@ -98,9 +128,11 @@
|
|||
interrupt-parent = <&gpmc>;
|
||||
interrupts = <0 IRQ_TYPE_NONE>, /* fifoevent */
|
||||
<1 IRQ_TYPE_NONE>; /* termcount */
|
||||
rb-gpios = <&gpmc 0 GPIO_ACTIVE_HIGH>; /* gpmc_wait0 */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ti,nand-ecc-opt = "bch8";
|
||||
ti,elm-id = <&elm>;
|
||||
nand-bus-width = <16>;
|
||||
gpmc,device-width = <2>;
|
||||
gpmc,sync-clk-ps = <0>;
|
||||
|
@ -164,7 +196,7 @@
|
|||
vmmc-supply = <&vmmcsd_fixed>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio2 7 GPIO_ACTIVE_LOW>;
|
||||
wp-gpios = <&gpio2 8 GPIO_ACTIVE_LOW>;
|
||||
wp-gpios = <&gpio2 8 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
/* At least dm8168-evm rev c won't support multipoint, later may */
|
||||
|
|
|
@ -145,7 +145,7 @@
|
|||
};
|
||||
|
||||
elm: elm@48080000 {
|
||||
compatible = "ti,816-elm";
|
||||
compatible = "ti,am3352-elm";
|
||||
ti,hwmods = "elm";
|
||||
reg = <0x48080000 0x2000>;
|
||||
interrupts = <4>;
|
||||
|
|
|
@ -190,7 +190,7 @@
|
|||
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_25_NS>;
|
||||
ti,tx-internal-delay = <DP83867_RGMIIDCTL_250_PS>;
|
||||
ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>;
|
||||
ti,impedance-control = <0x1f>;
|
||||
ti,min-output-impedance;
|
||||
};
|
||||
|
||||
dp83867_1: ethernet-phy@3 {
|
||||
|
@ -198,7 +198,7 @@
|
|||
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_25_NS>;
|
||||
ti,tx-internal-delay = <DP83867_RGMIIDCTL_250_PS>;
|
||||
ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>;
|
||||
ti,impedance-control = <0x1f>;
|
||||
ti,min-output-impedance;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -59,6 +59,9 @@
|
|||
compatible = "samsung,exynos4210-audss-clock";
|
||||
reg = <0x03810000 0x0C>;
|
||||
#clock-cells = <1>;
|
||||
clocks = <&clock CLK_FIN_PLL>, <&clock CLK_FOUT_EPLL>,
|
||||
<&clock CLK_SCLK_AUDIO0>, <&clock CLK_SCLK_AUDIO0>;
|
||||
clock-names = "pll_ref", "pll_in", "sclk_audio", "sclk_pcm_in";
|
||||
};
|
||||
|
||||
i2s0: i2s@03830000 {
|
||||
|
|
|
@ -1126,8 +1126,8 @@
|
|||
};
|
||||
};
|
||||
|
||||
gpu: mali@ffa30000 {
|
||||
compatible = "rockchip,rk3288-mali", "arm,mali-t760", "arm,mali-midgard";
|
||||
gpu: gpu@ffa30000 {
|
||||
compatible = "rockchip,rk3288-mali", "arm,mali-t760";
|
||||
reg = <0xffa30000 0x10000>;
|
||||
interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
|
||||
|
|
|
@ -44,7 +44,9 @@
|
|||
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
#include <dt-bindings/clock/sun8i-a83t-ccu.h>
|
||||
#include <dt-bindings/clock/sun8i-r-ccu.h>
|
||||
#include <dt-bindings/reset/sun8i-a83t-ccu.h>
|
||||
|
||||
/ {
|
||||
interrupt-parent = <&gic>;
|
||||
|
@ -175,8 +177,8 @@
|
|||
compatible = "allwinner,sun8i-a83t-dma";
|
||||
reg = <0x01c02000 0x1000>;
|
||||
interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ccu 21>;
|
||||
resets = <&ccu 7>;
|
||||
clocks = <&ccu CLK_BUS_DMA>;
|
||||
resets = <&ccu RST_BUS_DMA>;
|
||||
#dma-cells = <1>;
|
||||
};
|
||||
|
||||
|
@ -195,7 +197,7 @@
|
|||
<GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg = <0x01c20800 0x400>;
|
||||
clocks = <&ccu 45>, <&osc24M>, <&osc16Md512>;
|
||||
clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc16Md512>;
|
||||
clock-names = "apb", "hosc", "losc";
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
|
@ -247,8 +249,8 @@
|
|||
"allwinner,sun8i-h3-spdif";
|
||||
reg = <0x01c21000 0x400>;
|
||||
interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ccu 44>, <&ccu 76>;
|
||||
resets = <&ccu 32>;
|
||||
clocks = <&ccu CLK_BUS_SPDIF>, <&ccu CLK_SPDIF>;
|
||||
resets = <&ccu RST_BUS_SPDIF>;
|
||||
clock-names = "apb", "spdif";
|
||||
dmas = <&dma 2>;
|
||||
dma-names = "tx";
|
||||
|
@ -263,8 +265,8 @@
|
|||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
clocks = <&ccu 53>;
|
||||
resets = <&ccu 40>;
|
||||
clocks = <&ccu CLK_BUS_UART0>;
|
||||
resets = <&ccu RST_BUS_UART0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
|
|
@ -394,7 +394,7 @@
|
|||
emac: ethernet@1c30000 {
|
||||
compatible = "allwinner,sun8i-h3-emac";
|
||||
syscon = <&syscon>;
|
||||
reg = <0x01c30000 0x104>;
|
||||
reg = <0x01c30000 0x10000>;
|
||||
interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "macirq";
|
||||
resets = <&ccu RST_BUS_EMAC>;
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
};
|
||||
|
||||
ð0 {
|
||||
phy-connection-type = "rgmii";
|
||||
phy-connection-type = "rgmii-id";
|
||||
phy-handle = <ð0_phy>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
|
|
@ -37,7 +37,7 @@ do { \
|
|||
".pushsection .rodata.str, \"aMS\", %progbits, 1\n" \
|
||||
"2:\t.asciz " #__file "\n" \
|
||||
".popsection\n" \
|
||||
".pushsection __bug_table,\"a\"\n" \
|
||||
".pushsection __bug_table,\"aw\"\n" \
|
||||
".align 2\n" \
|
||||
"3:\t.word 1b, 2b\n" \
|
||||
"\t.hword " #__line ", 0\n" \
|
||||
|
|
|
@ -116,7 +116,7 @@ struct cpu_cache_fns {
|
|||
void (*dma_unmap_area)(const void *, size_t, int);
|
||||
|
||||
void (*dma_flush_range)(const void *, const void *);
|
||||
};
|
||||
} __no_randomize_layout;
|
||||
|
||||
/*
|
||||
* Select the calling method
|
||||
|
|
|
@ -19,6 +19,11 @@
|
|||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#define ARCH_HAS_KIMAGE_ARCH
|
||||
struct kimage_arch {
|
||||
u32 kernel_r2;
|
||||
};
|
||||
|
||||
/**
|
||||
* crash_setup_regs() - save registers for the panic kernel
|
||||
* @newregs: registers are saved here
|
||||
|
|
|
@ -35,6 +35,12 @@ struct ucontext {
|
|||
* bytes, to prevent unpredictable padding in the signal frame.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Dummy padding block: if this magic is encountered, the block should
|
||||
* be skipped using the corresponding size field.
|
||||
*/
|
||||
#define DUMMY_MAGIC 0xb0d9ed01
|
||||
|
||||
#ifdef CONFIG_CRUNCH
|
||||
#define CRUNCH_MAGIC 0x5065cf03
|
||||
#define CRUNCH_STORAGE_SIZE (CRUNCH_SIZE + 8)
|
||||
|
|
|
@ -30,7 +30,6 @@ extern unsigned long kexec_boot_atags;
|
|||
|
||||
static atomic_t waiting_for_crash_ipi;
|
||||
|
||||
static unsigned long dt_mem;
|
||||
/*
|
||||
* Provide a dummy crash_notes definition while crash dump arrives to arm.
|
||||
* This prevents breakage of crash_notes attribute in kernel/ksysfs.c.
|
||||
|
@ -42,6 +41,9 @@ int machine_kexec_prepare(struct kimage *image)
|
|||
__be32 header;
|
||||
int i, err;
|
||||
|
||||
image->arch.kernel_r2 = image->start - KEXEC_ARM_ZIMAGE_OFFSET
|
||||
+ KEXEC_ARM_ATAGS_OFFSET;
|
||||
|
||||
/*
|
||||
* Validate that if the current HW supports SMP, then the SW supports
|
||||
* and implements CPU hotplug for the current HW. If not, we won't be
|
||||
|
@ -66,8 +68,8 @@ int machine_kexec_prepare(struct kimage *image)
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
if (be32_to_cpu(header) == OF_DT_HEADER)
|
||||
dt_mem = current_segment->mem;
|
||||
if (header == cpu_to_be32(OF_DT_HEADER))
|
||||
image->arch.kernel_r2 = current_segment->mem;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -165,8 +167,7 @@ void machine_kexec(struct kimage *image)
|
|||
kexec_start_address = image->start;
|
||||
kexec_indirection_page = page_list;
|
||||
kexec_mach_type = machine_arch_type;
|
||||
kexec_boot_atags = dt_mem ?: image->start - KEXEC_ARM_ZIMAGE_OFFSET
|
||||
+ KEXEC_ARM_ATAGS_OFFSET;
|
||||
kexec_boot_atags = image->arch.kernel_r2;
|
||||
|
||||
/* copy our kernel relocation code to the control code page */
|
||||
reboot_entry = fncpy(reboot_code_buffer,
|
||||
|
|
|
@ -987,6 +987,9 @@ static void __init reserve_crashkernel(void)
|
|||
|
||||
if (crash_base <= 0) {
|
||||
unsigned long long crash_max = idmap_to_phys((u32)~0);
|
||||
unsigned long long lowmem_max = __pa(high_memory - 1) + 1;
|
||||
if (crash_max > lowmem_max)
|
||||
crash_max = lowmem_max;
|
||||
crash_base = memblock_find_in_range(CRASH_ALIGN, crash_max,
|
||||
crash_size, CRASH_ALIGN);
|
||||
if (!crash_base) {
|
||||
|
|
|
@ -40,8 +40,10 @@ static int preserve_crunch_context(struct crunch_sigframe __user *frame)
|
|||
return __copy_to_user(frame, kframe, sizeof(*frame));
|
||||
}
|
||||
|
||||
static int restore_crunch_context(struct crunch_sigframe __user *frame)
|
||||
static int restore_crunch_context(char __user **auxp)
|
||||
{
|
||||
struct crunch_sigframe __user *frame =
|
||||
(struct crunch_sigframe __user *)*auxp;
|
||||
char kbuf[sizeof(*frame) + 8];
|
||||
struct crunch_sigframe *kframe;
|
||||
|
||||
|
@ -52,6 +54,7 @@ static int restore_crunch_context(struct crunch_sigframe __user *frame)
|
|||
if (kframe->magic != CRUNCH_MAGIC ||
|
||||
kframe->size != CRUNCH_STORAGE_SIZE)
|
||||
return -1;
|
||||
*auxp += CRUNCH_STORAGE_SIZE;
|
||||
crunch_task_restore(current_thread_info(), &kframe->storage);
|
||||
return 0;
|
||||
}
|
||||
|
@ -59,21 +62,39 @@ static int restore_crunch_context(struct crunch_sigframe __user *frame)
|
|||
|
||||
#ifdef CONFIG_IWMMXT
|
||||
|
||||
static int preserve_iwmmxt_context(struct iwmmxt_sigframe *frame)
|
||||
static int preserve_iwmmxt_context(struct iwmmxt_sigframe __user *frame)
|
||||
{
|
||||
char kbuf[sizeof(*frame) + 8];
|
||||
struct iwmmxt_sigframe *kframe;
|
||||
int err = 0;
|
||||
|
||||
/* the iWMMXt context must be 64 bit aligned */
|
||||
kframe = (struct iwmmxt_sigframe *)((unsigned long)(kbuf + 8) & ~7);
|
||||
kframe->magic = IWMMXT_MAGIC;
|
||||
kframe->size = IWMMXT_STORAGE_SIZE;
|
||||
iwmmxt_task_copy(current_thread_info(), &kframe->storage);
|
||||
return __copy_to_user(frame, kframe, sizeof(*frame));
|
||||
|
||||
if (test_thread_flag(TIF_USING_IWMMXT)) {
|
||||
kframe->magic = IWMMXT_MAGIC;
|
||||
kframe->size = IWMMXT_STORAGE_SIZE;
|
||||
iwmmxt_task_copy(current_thread_info(), &kframe->storage);
|
||||
|
||||
err = __copy_to_user(frame, kframe, sizeof(*frame));
|
||||
} else {
|
||||
/*
|
||||
* For bug-compatibility with older kernels, some space
|
||||
* has to be reserved for iWMMXt even if it's not used.
|
||||
* Set the magic and size appropriately so that properly
|
||||
* written userspace can skip it reliably:
|
||||
*/
|
||||
__put_user_error(DUMMY_MAGIC, &frame->magic, err);
|
||||
__put_user_error(IWMMXT_STORAGE_SIZE, &frame->size, err);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int restore_iwmmxt_context(struct iwmmxt_sigframe *frame)
|
||||
static int restore_iwmmxt_context(char __user **auxp)
|
||||
{
|
||||
struct iwmmxt_sigframe __user *frame =
|
||||
(struct iwmmxt_sigframe __user *)*auxp;
|
||||
char kbuf[sizeof(*frame) + 8];
|
||||
struct iwmmxt_sigframe *kframe;
|
||||
|
||||
|
@ -81,10 +102,28 @@ static int restore_iwmmxt_context(struct iwmmxt_sigframe *frame)
|
|||
kframe = (struct iwmmxt_sigframe *)((unsigned long)(kbuf + 8) & ~7);
|
||||
if (__copy_from_user(kframe, frame, sizeof(*frame)))
|
||||
return -1;
|
||||
if (kframe->magic != IWMMXT_MAGIC ||
|
||||
kframe->size != IWMMXT_STORAGE_SIZE)
|
||||
|
||||
/*
|
||||
* For non-iWMMXt threads: a single iwmmxt_sigframe-sized dummy
|
||||
* block is discarded for compatibility with setup_sigframe() if
|
||||
* present, but we don't mandate its presence. If some other
|
||||
* magic is here, it's not for us:
|
||||
*/
|
||||
if (!test_thread_flag(TIF_USING_IWMMXT) &&
|
||||
kframe->magic != DUMMY_MAGIC)
|
||||
return 0;
|
||||
|
||||
if (kframe->size != IWMMXT_STORAGE_SIZE)
|
||||
return -1;
|
||||
iwmmxt_task_restore(current_thread_info(), &kframe->storage);
|
||||
|
||||
if (test_thread_flag(TIF_USING_IWMMXT)) {
|
||||
if (kframe->magic != IWMMXT_MAGIC)
|
||||
return -1;
|
||||
|
||||
iwmmxt_task_restore(current_thread_info(), &kframe->storage);
|
||||
}
|
||||
|
||||
*auxp += IWMMXT_STORAGE_SIZE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -107,8 +146,10 @@ static int preserve_vfp_context(struct vfp_sigframe __user *frame)
|
|||
return vfp_preserve_user_clear_hwstate(&frame->ufp, &frame->ufp_exc);
|
||||
}
|
||||
|
||||
static int restore_vfp_context(struct vfp_sigframe __user *frame)
|
||||
static int restore_vfp_context(char __user **auxp)
|
||||
{
|
||||
struct vfp_sigframe __user *frame =
|
||||
(struct vfp_sigframe __user *)*auxp;
|
||||
unsigned long magic;
|
||||
unsigned long size;
|
||||
int err = 0;
|
||||
|
@ -121,6 +162,7 @@ static int restore_vfp_context(struct vfp_sigframe __user *frame)
|
|||
if (magic != VFP_MAGIC || size != VFP_STORAGE_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
*auxp += size;
|
||||
return vfp_restore_user_hwstate(&frame->ufp, &frame->ufp_exc);
|
||||
}
|
||||
|
||||
|
@ -141,7 +183,7 @@ struct rt_sigframe {
|
|||
|
||||
static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf)
|
||||
{
|
||||
struct aux_sigframe __user *aux;
|
||||
char __user *aux;
|
||||
sigset_t set;
|
||||
int err;
|
||||
|
||||
|
@ -169,18 +211,18 @@ static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf)
|
|||
|
||||
err |= !valid_user_regs(regs);
|
||||
|
||||
aux = (struct aux_sigframe __user *) sf->uc.uc_regspace;
|
||||
aux = (char __user *) sf->uc.uc_regspace;
|
||||
#ifdef CONFIG_CRUNCH
|
||||
if (err == 0)
|
||||
err |= restore_crunch_context(&aux->crunch);
|
||||
err |= restore_crunch_context(&aux);
|
||||
#endif
|
||||
#ifdef CONFIG_IWMMXT
|
||||
if (err == 0 && test_thread_flag(TIF_USING_IWMMXT))
|
||||
err |= restore_iwmmxt_context(&aux->iwmmxt);
|
||||
if (err == 0)
|
||||
err |= restore_iwmmxt_context(&aux);
|
||||
#endif
|
||||
#ifdef CONFIG_VFP
|
||||
if (err == 0)
|
||||
err |= restore_vfp_context(&aux->vfp);
|
||||
err |= restore_vfp_context(&aux);
|
||||
#endif
|
||||
|
||||
return err;
|
||||
|
@ -286,7 +328,7 @@ setup_sigframe(struct sigframe __user *sf, struct pt_regs *regs, sigset_t *set)
|
|||
err |= preserve_crunch_context(&aux->crunch);
|
||||
#endif
|
||||
#ifdef CONFIG_IWMMXT
|
||||
if (err == 0 && test_thread_flag(TIF_USING_IWMMXT))
|
||||
if (err == 0)
|
||||
err |= preserve_iwmmxt_context(&aux->iwmmxt);
|
||||
#endif
|
||||
#ifdef CONFIG_VFP
|
||||
|
|
|
@ -1166,7 +1166,7 @@ static struct tvp514x_platform_data tvp5146_pdata = {
|
|||
|
||||
#define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL)
|
||||
|
||||
static const struct vpif_input da850_ch0_inputs[] = {
|
||||
static struct vpif_input da850_ch0_inputs[] = {
|
||||
{
|
||||
.input = {
|
||||
.index = 0,
|
||||
|
@ -1181,7 +1181,7 @@ static const struct vpif_input da850_ch0_inputs[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static const struct vpif_input da850_ch1_inputs[] = {
|
||||
static struct vpif_input da850_ch1_inputs[] = {
|
||||
{
|
||||
.input = {
|
||||
.index = 0,
|
||||
|
|
|
@ -218,6 +218,15 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
|
|||
}
|
||||
EXPORT_SYMBOL(clk_set_parent);
|
||||
|
||||
struct clk *clk_get_parent(struct clk *clk)
|
||||
{
|
||||
if (!clk)
|
||||
return NULL;
|
||||
|
||||
return clk->parent;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get_parent);
|
||||
|
||||
int clk_register(struct clk *clk)
|
||||
{
|
||||
if (clk == NULL || IS_ERR(clk))
|
||||
|
|
|
@ -475,6 +475,26 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
|
|||
}
|
||||
EXPORT_SYMBOL(clk_set_rate);
|
||||
|
||||
long clk_round_rate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
WARN_ON(clk);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_round_rate);
|
||||
|
||||
int clk_set_parent(struct clk *clk, struct clk *parent)
|
||||
{
|
||||
WARN_ON(clk);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_set_parent);
|
||||
|
||||
struct clk *clk_get_parent(struct clk *clk)
|
||||
{
|
||||
return clk->parent;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get_parent);
|
||||
|
||||
|
||||
static char fclk_divisors[] = { 1, 2, 4, 8, 16, 1, 1, 1 };
|
||||
static char hclk_divisors[] = { 1, 2, 4, 5, 6, 8, 16, 32 };
|
||||
|
|
|
@ -95,8 +95,10 @@ static inline void __indirect_writeb(u8 value, volatile void __iomem *p)
|
|||
}
|
||||
|
||||
static inline void __indirect_writesb(volatile void __iomem *bus_addr,
|
||||
const u8 *vaddr, int count)
|
||||
const void *p, int count)
|
||||
{
|
||||
const u8 *vaddr = p;
|
||||
|
||||
while (count--)
|
||||
writeb(*vaddr++, bus_addr);
|
||||
}
|
||||
|
@ -118,8 +120,10 @@ static inline void __indirect_writew(u16 value, volatile void __iomem *p)
|
|||
}
|
||||
|
||||
static inline void __indirect_writesw(volatile void __iomem *bus_addr,
|
||||
const u16 *vaddr, int count)
|
||||
const void *p, int count)
|
||||
{
|
||||
const u16 *vaddr = p;
|
||||
|
||||
while (count--)
|
||||
writew(*vaddr++, bus_addr);
|
||||
}
|
||||
|
@ -137,8 +141,9 @@ static inline void __indirect_writel(u32 value, volatile void __iomem *p)
|
|||
}
|
||||
|
||||
static inline void __indirect_writesl(volatile void __iomem *bus_addr,
|
||||
const u32 *vaddr, int count)
|
||||
const void *p, int count)
|
||||
{
|
||||
const u32 *vaddr = p;
|
||||
while (count--)
|
||||
writel(*vaddr++, bus_addr);
|
||||
}
|
||||
|
@ -160,8 +165,10 @@ static inline u8 __indirect_readb(const volatile void __iomem *p)
|
|||
}
|
||||
|
||||
static inline void __indirect_readsb(const volatile void __iomem *bus_addr,
|
||||
u8 *vaddr, u32 count)
|
||||
void *p, u32 count)
|
||||
{
|
||||
u8 *vaddr = p;
|
||||
|
||||
while (count--)
|
||||
*vaddr++ = readb(bus_addr);
|
||||
}
|
||||
|
@ -183,8 +190,10 @@ static inline u16 __indirect_readw(const volatile void __iomem *p)
|
|||
}
|
||||
|
||||
static inline void __indirect_readsw(const volatile void __iomem *bus_addr,
|
||||
u16 *vaddr, u32 count)
|
||||
void *p, u32 count)
|
||||
{
|
||||
u16 *vaddr = p;
|
||||
|
||||
while (count--)
|
||||
*vaddr++ = readw(bus_addr);
|
||||
}
|
||||
|
@ -204,8 +213,10 @@ static inline u32 __indirect_readl(const volatile void __iomem *p)
|
|||
}
|
||||
|
||||
static inline void __indirect_readsl(const volatile void __iomem *bus_addr,
|
||||
u32 *vaddr, u32 count)
|
||||
void *p, u32 count)
|
||||
{
|
||||
u32 *vaddr = p;
|
||||
|
||||
while (count--)
|
||||
*vaddr++ = readl(bus_addr);
|
||||
}
|
||||
|
@ -523,8 +534,15 @@ static inline void iowrite32_rep(void __iomem *addr, const void *vaddr,
|
|||
#endif
|
||||
}
|
||||
|
||||
#define ioport_map(port, nr) ((void __iomem*)(port + PIO_OFFSET))
|
||||
#define ioport_unmap(addr)
|
||||
#define ioport_map(port, nr) ioport_map(port, nr)
|
||||
static inline void __iomem *ioport_map(unsigned long port, unsigned int nr)
|
||||
{
|
||||
return ((void __iomem*)((port) + PIO_OFFSET));
|
||||
}
|
||||
#define ioport_unmap(addr) ioport_unmap(addr)
|
||||
static inline void ioport_unmap(void __iomem *addr)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_PCI */
|
||||
|
||||
#endif /* __ASM_ARM_ARCH_IO_H */
|
||||
|
|
|
@ -238,7 +238,7 @@ void pxa_usb_phy_deinit(void __iomem *phy_reg)
|
|||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_USB_SUPPORT)
|
||||
static u64 usb_dma_mask = ~(u32)0;
|
||||
static u64 __maybe_unused usb_dma_mask = ~(u32)0;
|
||||
|
||||
#if IS_ENABLED(CONFIG_USB_MV_UDC)
|
||||
struct resource pxa168_u2o_resources[] = {
|
||||
|
|
|
@ -211,7 +211,7 @@ static int mv98dx3236_resume_set_cpu_boot_addr(int hw_cpu, void *boot_addr)
|
|||
return PTR_ERR(base);
|
||||
|
||||
writel(0, base + MV98DX3236_CPU_RESUME_CTRL_REG);
|
||||
writel(virt_to_phys(boot_addr), base + MV98DX3236_CPU_RESUME_ADDR_REG);
|
||||
writel(__pa_symbol(boot_addr), base + MV98DX3236_CPU_RESUME_ADDR_REG);
|
||||
|
||||
iounmap(base);
|
||||
|
||||
|
|
|
@ -510,6 +510,7 @@ static void __init ams_delta_init(void)
|
|||
static void modem_pm(struct uart_port *port, unsigned int state, unsigned old)
|
||||
{
|
||||
struct modem_private_data *priv = port->private_data;
|
||||
int ret;
|
||||
|
||||
if (IS_ERR(priv->regulator))
|
||||
return;
|
||||
|
@ -518,9 +519,16 @@ static void modem_pm(struct uart_port *port, unsigned int state, unsigned old)
|
|||
return;
|
||||
|
||||
if (state == 0)
|
||||
regulator_enable(priv->regulator);
|
||||
ret = regulator_enable(priv->regulator);
|
||||
else if (old == 0)
|
||||
regulator_disable(priv->regulator);
|
||||
ret = regulator_disable(priv->regulator);
|
||||
else
|
||||
ret = 0;
|
||||
|
||||
if (ret)
|
||||
dev_warn(port->dev,
|
||||
"ams_delta modem_pm: failed to %sable regulator: %d\n",
|
||||
state ? "dis" : "en", ret);
|
||||
}
|
||||
|
||||
static struct plat_serial8250_port ams_delta_modem_ports[] = {
|
||||
|
|
|
@ -441,13 +441,11 @@ static struct spi_board_info __initdata mistral_boardinfo[] = { {
|
|||
.chip_select = 0,
|
||||
} };
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static irqreturn_t
|
||||
osk_mistral_wake_interrupt(int irq, void *ignored)
|
||||
{
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void __init osk_mistral_init(void)
|
||||
{
|
||||
|
@ -515,7 +513,6 @@ static void __init osk_mistral_init(void)
|
|||
|
||||
gpio_direction_input(OMAP_MPUIO(2));
|
||||
irq_set_irq_type(irq, IRQ_TYPE_EDGE_RISING);
|
||||
#ifdef CONFIG_PM
|
||||
/* share the IRQ in case someone wants to use the
|
||||
* button for more than wakeup from system sleep.
|
||||
*/
|
||||
|
@ -529,7 +526,6 @@ static void __init osk_mistral_init(void)
|
|||
ret);
|
||||
} else
|
||||
enable_irq_wake(irq);
|
||||
#endif
|
||||
} else
|
||||
printk(KERN_ERR "OSK+Mistral: wakeup button is awol\n");
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ static const struct of_device_id omap_dt_match_table[] __initconst = {
|
|||
{ }
|
||||
};
|
||||
|
||||
static void __init omap_generic_init(void)
|
||||
static void __init __maybe_unused omap_generic_init(void)
|
||||
{
|
||||
pdata_quirks_init(omap_dt_match_table);
|
||||
|
||||
|
|
|
@ -32,120 +32,6 @@ static u16 control_devconf1_offset;
|
|||
|
||||
#define HSMMC_NAME_LEN 9
|
||||
|
||||
static void omap_hsmmc1_before_set_reg(struct device *dev,
|
||||
int power_on, int vdd)
|
||||
{
|
||||
u32 reg, prog_io;
|
||||
struct omap_hsmmc_platform_data *mmc = dev->platform_data;
|
||||
|
||||
if (mmc->remux)
|
||||
mmc->remux(dev, power_on);
|
||||
|
||||
/*
|
||||
* Assume we power both OMAP VMMC1 (for CMD, CLK, DAT0..3) and the
|
||||
* card with Vcc regulator (from twl4030 or whatever). OMAP has both
|
||||
* 1.8V and 3.0V modes, controlled by the PBIAS register.
|
||||
*
|
||||
* In 8-bit modes, OMAP VMMC1A (for DAT4..7) needs a supply, which
|
||||
* is most naturally TWL VSIM; those pins also use PBIAS.
|
||||
*
|
||||
* FIXME handle VMMC1A as needed ...
|
||||
*/
|
||||
if (power_on) {
|
||||
if (cpu_is_omap2430()) {
|
||||
reg = omap_ctrl_readl(OMAP243X_CONTROL_DEVCONF1);
|
||||
if ((1 << vdd) >= MMC_VDD_30_31)
|
||||
reg |= OMAP243X_MMC1_ACTIVE_OVERWRITE;
|
||||
else
|
||||
reg &= ~OMAP243X_MMC1_ACTIVE_OVERWRITE;
|
||||
omap_ctrl_writel(reg, OMAP243X_CONTROL_DEVCONF1);
|
||||
}
|
||||
|
||||
if (mmc->internal_clock) {
|
||||
reg = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
|
||||
reg |= OMAP2_MMCSDIO1ADPCLKISEL;
|
||||
omap_ctrl_writel(reg, OMAP2_CONTROL_DEVCONF0);
|
||||
}
|
||||
|
||||
reg = omap_ctrl_readl(control_pbias_offset);
|
||||
if (cpu_is_omap3630()) {
|
||||
/* Set MMC I/O to 52MHz */
|
||||
prog_io = omap_ctrl_readl(OMAP343X_CONTROL_PROG_IO1);
|
||||
prog_io |= OMAP3630_PRG_SDMMC1_SPEEDCTRL;
|
||||
omap_ctrl_writel(prog_io, OMAP343X_CONTROL_PROG_IO1);
|
||||
} else {
|
||||
reg |= OMAP2_PBIASSPEEDCTRL0;
|
||||
}
|
||||
reg &= ~OMAP2_PBIASLITEPWRDNZ0;
|
||||
omap_ctrl_writel(reg, control_pbias_offset);
|
||||
} else {
|
||||
reg = omap_ctrl_readl(control_pbias_offset);
|
||||
reg &= ~OMAP2_PBIASLITEPWRDNZ0;
|
||||
omap_ctrl_writel(reg, control_pbias_offset);
|
||||
}
|
||||
}
|
||||
|
||||
static void omap_hsmmc1_after_set_reg(struct device *dev, int power_on, int vdd)
|
||||
{
|
||||
u32 reg;
|
||||
|
||||
/* 100ms delay required for PBIAS configuration */
|
||||
msleep(100);
|
||||
|
||||
if (power_on) {
|
||||
reg = omap_ctrl_readl(control_pbias_offset);
|
||||
reg |= (OMAP2_PBIASLITEPWRDNZ0 | OMAP2_PBIASSPEEDCTRL0);
|
||||
if ((1 << vdd) <= MMC_VDD_165_195)
|
||||
reg &= ~OMAP2_PBIASLITEVMODE0;
|
||||
else
|
||||
reg |= OMAP2_PBIASLITEVMODE0;
|
||||
omap_ctrl_writel(reg, control_pbias_offset);
|
||||
} else {
|
||||
reg = omap_ctrl_readl(control_pbias_offset);
|
||||
reg |= (OMAP2_PBIASSPEEDCTRL0 | OMAP2_PBIASLITEPWRDNZ0 |
|
||||
OMAP2_PBIASLITEVMODE0);
|
||||
omap_ctrl_writel(reg, control_pbias_offset);
|
||||
}
|
||||
}
|
||||
|
||||
static void hsmmc2_select_input_clk_src(struct omap_hsmmc_platform_data *mmc)
|
||||
{
|
||||
u32 reg;
|
||||
|
||||
reg = omap_ctrl_readl(control_devconf1_offset);
|
||||
if (mmc->internal_clock)
|
||||
reg |= OMAP2_MMCSDIO2ADPCLKISEL;
|
||||
else
|
||||
reg &= ~OMAP2_MMCSDIO2ADPCLKISEL;
|
||||
omap_ctrl_writel(reg, control_devconf1_offset);
|
||||
}
|
||||
|
||||
static void hsmmc2_before_set_reg(struct device *dev, int power_on, int vdd)
|
||||
{
|
||||
struct omap_hsmmc_platform_data *mmc = dev->platform_data;
|
||||
|
||||
if (mmc->remux)
|
||||
mmc->remux(dev, power_on);
|
||||
|
||||
if (power_on)
|
||||
hsmmc2_select_input_clk_src(mmc);
|
||||
}
|
||||
|
||||
static int am35x_hsmmc2_set_power(struct device *dev, int power_on, int vdd)
|
||||
{
|
||||
struct omap_hsmmc_platform_data *mmc = dev->platform_data;
|
||||
|
||||
if (power_on)
|
||||
hsmmc2_select_input_clk_src(mmc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int nop_mmc_set_power(struct device *dev, int power_on, int vdd)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
|
||||
struct omap_hsmmc_platform_data *mmc)
|
||||
{
|
||||
|
@ -157,101 +43,11 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (c->name)
|
||||
strncpy(hc_name, c->name, HSMMC_NAME_LEN);
|
||||
else
|
||||
snprintf(hc_name, (HSMMC_NAME_LEN + 1), "mmc%islot%i",
|
||||
c->mmc, 1);
|
||||
snprintf(hc_name, (HSMMC_NAME_LEN + 1), "mmc%islot%i", c->mmc, 1);
|
||||
mmc->name = hc_name;
|
||||
mmc->caps = c->caps;
|
||||
mmc->internal_clock = !c->ext_clock;
|
||||
mmc->reg_offset = 0;
|
||||
|
||||
if (c->cover_only) {
|
||||
/* detect if mobile phone cover removed */
|
||||
mmc->gpio_cd = -EINVAL;
|
||||
mmc->gpio_cod = c->gpio_cd;
|
||||
} else {
|
||||
/* card detect pin on the mmc socket itself */
|
||||
mmc->gpio_cd = c->gpio_cd;
|
||||
mmc->gpio_cod = -EINVAL;
|
||||
}
|
||||
mmc->gpio_wp = c->gpio_wp;
|
||||
|
||||
mmc->remux = c->remux;
|
||||
mmc->init_card = c->init_card;
|
||||
|
||||
if (c->nonremovable)
|
||||
mmc->nonremovable = 1;
|
||||
|
||||
/*
|
||||
* NOTE: MMC slots should have a Vcc regulator set up.
|
||||
* This may be from a TWL4030-family chip, another
|
||||
* controllable regulator, or a fixed supply.
|
||||
*
|
||||
* temporary HACK: ocr_mask instead of fixed supply
|
||||
*/
|
||||
if (soc_is_am35xx())
|
||||
mmc->ocr_mask = MMC_VDD_165_195 |
|
||||
MMC_VDD_26_27 |
|
||||
MMC_VDD_27_28 |
|
||||
MMC_VDD_29_30 |
|
||||
MMC_VDD_30_31 |
|
||||
MMC_VDD_31_32;
|
||||
else
|
||||
mmc->ocr_mask = c->ocr_mask;
|
||||
|
||||
if (!soc_is_am35xx())
|
||||
mmc->features |= HSMMC_HAS_PBIAS;
|
||||
|
||||
switch (c->mmc) {
|
||||
case 1:
|
||||
if (mmc->features & HSMMC_HAS_PBIAS) {
|
||||
/* on-chip level shifting via PBIAS0/PBIAS1 */
|
||||
mmc->before_set_reg =
|
||||
omap_hsmmc1_before_set_reg;
|
||||
mmc->after_set_reg =
|
||||
omap_hsmmc1_after_set_reg;
|
||||
}
|
||||
|
||||
if (soc_is_am35xx())
|
||||
mmc->set_power = nop_mmc_set_power;
|
||||
|
||||
/* OMAP3630 HSMMC1 supports only 4-bit */
|
||||
if (cpu_is_omap3630() &&
|
||||
(c->caps & MMC_CAP_8_BIT_DATA)) {
|
||||
c->caps &= ~MMC_CAP_8_BIT_DATA;
|
||||
c->caps |= MMC_CAP_4_BIT_DATA;
|
||||
mmc->caps = c->caps;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (soc_is_am35xx())
|
||||
mmc->set_power = am35x_hsmmc2_set_power;
|
||||
|
||||
if (c->ext_clock)
|
||||
c->transceiver = 1;
|
||||
if (c->transceiver && (c->caps & MMC_CAP_8_BIT_DATA)) {
|
||||
c->caps &= ~MMC_CAP_8_BIT_DATA;
|
||||
c->caps |= MMC_CAP_4_BIT_DATA;
|
||||
}
|
||||
if (mmc->features & HSMMC_HAS_PBIAS) {
|
||||
/* off-chip level shifting, or none */
|
||||
mmc->before_set_reg = hsmmc2_before_set_reg;
|
||||
mmc->after_set_reg = NULL;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
mmc->before_set_reg = NULL;
|
||||
mmc->after_set_reg = NULL;
|
||||
break;
|
||||
default:
|
||||
pr_err("MMC%d configuration not supported!\n", c->mmc);
|
||||
kfree(hc_name);
|
||||
return -ENODEV;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -260,7 +56,6 @@ static int omap_hsmmc_done;
|
|||
void omap_hsmmc_late_init(struct omap2_hsmmc_info *c)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
struct omap_hsmmc_platform_data *mmc_pdata;
|
||||
int res;
|
||||
|
||||
if (omap_hsmmc_done != 1)
|
||||
|
@ -269,32 +64,12 @@ void omap_hsmmc_late_init(struct omap2_hsmmc_info *c)
|
|||
omap_hsmmc_done++;
|
||||
|
||||
for (; c->mmc; c++) {
|
||||
if (!c->deferred)
|
||||
continue;
|
||||
|
||||
pdev = c->pdev;
|
||||
if (!pdev)
|
||||
continue;
|
||||
|
||||
mmc_pdata = pdev->dev.platform_data;
|
||||
if (!mmc_pdata)
|
||||
continue;
|
||||
|
||||
if (c->cover_only) {
|
||||
/* detect if mobile phone cover removed */
|
||||
mmc_pdata->gpio_cd = -EINVAL;
|
||||
mmc_pdata->gpio_cod = c->gpio_cd;
|
||||
} else {
|
||||
/* card detect pin on the mmc socket itself */
|
||||
mmc_pdata->gpio_cd = c->gpio_cd;
|
||||
mmc_pdata->gpio_cod = -EINVAL;
|
||||
}
|
||||
mmc_pdata->gpio_wp = c->gpio_wp;
|
||||
|
||||
res = omap_device_register(pdev);
|
||||
if (res)
|
||||
pr_err("Could not late init MMC %s\n",
|
||||
c->name);
|
||||
pr_err("Could not late init MMC\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -336,13 +111,6 @@ static void __init omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo,
|
|||
if (oh->dev_attr != NULL) {
|
||||
mmc_dev_attr = oh->dev_attr;
|
||||
mmc_data->controller_flags = mmc_dev_attr->flags;
|
||||
/*
|
||||
* erratum 2.1.1.128 doesn't apply if board has
|
||||
* a transceiver is attached
|
||||
*/
|
||||
if (hsmmcinfo->transceiver)
|
||||
mmc_data->controller_flags &=
|
||||
~OMAP_HSMMC_BROKEN_MULTIBLOCK_READ;
|
||||
}
|
||||
|
||||
pdev = platform_device_alloc(name, ctrl_nr - 1);
|
||||
|
@ -367,9 +135,6 @@ static void __init omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo,
|
|||
|
||||
hsmmcinfo->pdev = pdev;
|
||||
|
||||
if (hsmmcinfo->deferred)
|
||||
goto free_mmc;
|
||||
|
||||
res = omap_device_register(pdev);
|
||||
if (res) {
|
||||
pr_err("Could not register od for %s\n", name);
|
||||
|
|
|
@ -12,18 +12,9 @@ struct omap2_hsmmc_info {
|
|||
u8 mmc; /* controller 1/2/3 */
|
||||
u32 caps; /* 4/8 wires and any additional host
|
||||
* capabilities OR'd (ref. linux/mmc/host.h) */
|
||||
bool transceiver; /* MMC-2 option */
|
||||
bool ext_clock; /* use external pin for input clock */
|
||||
bool cover_only; /* No card detect - just cover switch */
|
||||
bool nonremovable; /* Nonremovable e.g. eMMC */
|
||||
bool deferred; /* mmc needs a deferred probe */
|
||||
int gpio_cd; /* or -EINVAL */
|
||||
int gpio_wp; /* or -EINVAL */
|
||||
char *name; /* or NULL for default */
|
||||
struct platform_device *pdev; /* mmc controller instance */
|
||||
int ocr_mask; /* temporary HACK */
|
||||
/* Remux (pad configuration) when powering on/off */
|
||||
void (*remux)(struct device *dev, int power_on);
|
||||
/* init some special card */
|
||||
void (*init_card)(struct mmc_card *card);
|
||||
};
|
||||
|
|
|
@ -410,7 +410,7 @@ static int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data)
|
|||
return omap_hwmod_set_postsetup_state(oh, *(u8 *)data);
|
||||
}
|
||||
|
||||
static void __init omap_hwmod_init_postsetup(void)
|
||||
static void __init __maybe_unused omap_hwmod_init_postsetup(void)
|
||||
{
|
||||
u8 postsetup_state;
|
||||
|
||||
|
|
|
@ -486,7 +486,6 @@ int __init omap3_pm_init(void)
|
|||
ret = request_irq(omap_prcm_event_to_irq("io"),
|
||||
_prcm_int_handle_io, IRQF_SHARED | IRQF_NO_SUSPEND, "pm_io",
|
||||
omap3_pm_init);
|
||||
enable_irq(omap_prcm_event_to_irq("io"));
|
||||
|
||||
if (ret) {
|
||||
pr_err("pm: Failed to request pm_io irq\n");
|
||||
|
|
|
@ -692,7 +692,6 @@ static int omap3xxx_prm_late_init(void)
|
|||
{
|
||||
struct device_node *np;
|
||||
int irq_num;
|
||||
int ret;
|
||||
|
||||
if (!(prm_features & PRM_HAS_IO_WAKEUP))
|
||||
return 0;
|
||||
|
@ -712,12 +711,8 @@ static int omap3xxx_prm_late_init(void)
|
|||
}
|
||||
|
||||
omap3xxx_prm_enable_io_wakeup();
|
||||
ret = omap_prcm_register_chain_handler(&omap3_prcm_irq_setup);
|
||||
if (!ret)
|
||||
irq_set_status_flags(omap_prcm_event_to_irq("io"),
|
||||
IRQ_NOAUTOEN);
|
||||
|
||||
return ret;
|
||||
return omap_prcm_register_chain_handler(&omap3_prcm_irq_setup);
|
||||
}
|
||||
|
||||
static void __exit omap3xxx_prm_exit(void)
|
||||
|
|
|
@ -336,6 +336,27 @@ static void omap44xx_prm_reconfigure_io_chain(void)
|
|||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* omap44xx_prm_enable_io_wakeup - enable wakeup events from I/O wakeup latches
|
||||
*
|
||||
* Activates the I/O wakeup event latches and allows events logged by
|
||||
* those latches to signal a wakeup event to the PRCM. For I/O wakeups
|
||||
* to occur, WAKEUPENABLE bits must be set in the pad mux registers, and
|
||||
* omap44xx_prm_reconfigure_io_chain() must be called. No return value.
|
||||
*/
|
||||
static void __init omap44xx_prm_enable_io_wakeup(void)
|
||||
{
|
||||
s32 inst = omap4_prmst_get_prm_dev_inst();
|
||||
|
||||
if (inst == PRM_INSTANCE_UNKNOWN)
|
||||
return;
|
||||
|
||||
omap4_prm_rmw_inst_reg_bits(OMAP4430_GLOBAL_WUEN_MASK,
|
||||
OMAP4430_GLOBAL_WUEN_MASK,
|
||||
inst,
|
||||
omap4_prcm_irq_setup.pm_ctrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* omap44xx_prm_read_reset_sources - return the last SoC reset source
|
||||
*
|
||||
|
@ -668,6 +689,8 @@ struct pwrdm_ops omap4_pwrdm_operations = {
|
|||
.pwrdm_has_voltdm = omap4_check_vcvp,
|
||||
};
|
||||
|
||||
static int omap44xx_prm_late_init(void);
|
||||
|
||||
/*
|
||||
* XXX document
|
||||
*/
|
||||
|
@ -675,6 +698,7 @@ static struct prm_ll_data omap44xx_prm_ll_data = {
|
|||
.read_reset_sources = &omap44xx_prm_read_reset_sources,
|
||||
.was_any_context_lost_old = &omap44xx_prm_was_any_context_lost_old,
|
||||
.clear_context_loss_flags_old = &omap44xx_prm_clear_context_loss_flags_old,
|
||||
.late_init = &omap44xx_prm_late_init,
|
||||
.assert_hardreset = omap4_prminst_assert_hardreset,
|
||||
.deassert_hardreset = omap4_prminst_deassert_hardreset,
|
||||
.is_hardreset_asserted = omap4_prminst_is_hardreset_asserted,
|
||||
|
@ -711,6 +735,37 @@ int __init omap44xx_prm_init(const struct omap_prcm_init_data *data)
|
|||
return prm_register(&omap44xx_prm_ll_data);
|
||||
}
|
||||
|
||||
static int omap44xx_prm_late_init(void)
|
||||
{
|
||||
int irq_num;
|
||||
|
||||
if (!(prm_features & PRM_HAS_IO_WAKEUP))
|
||||
return 0;
|
||||
|
||||
irq_num = of_irq_get(prm_init_data->np, 0);
|
||||
/*
|
||||
* Already have OMAP4 IRQ num. For all other platforms, we need
|
||||
* IRQ numbers from DT
|
||||
*/
|
||||
if (irq_num < 0 && !(prm_init_data->flags & PRM_IRQ_DEFAULT)) {
|
||||
if (irq_num == -EPROBE_DEFER)
|
||||
return irq_num;
|
||||
|
||||
/* Have nothing to do */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Once OMAP4 DT is filled as well */
|
||||
if (irq_num >= 0) {
|
||||
omap4_prcm_irq_setup.irq = irq_num;
|
||||
omap4_prcm_irq_setup.xlate_irq = NULL;
|
||||
}
|
||||
|
||||
omap44xx_prm_enable_io_wakeup();
|
||||
|
||||
return omap_prcm_register_chain_handler(&omap4_prcm_irq_setup);
|
||||
}
|
||||
|
||||
static void __exit omap44xx_prm_exit(void)
|
||||
{
|
||||
prm_unregister(&omap44xx_prm_ll_data);
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include <linux/of_platform.h>
|
||||
#include "common.h"
|
||||
|
||||
static void __init sirfsoc_init_late(void)
|
||||
static void __init __maybe_unused sirfsoc_init_late(void)
|
||||
{
|
||||
sirfsoc_pm_init();
|
||||
}
|
||||
|
|
|
@ -566,6 +566,7 @@ config MACH_ICONTROL
|
|||
config ARCH_PXA_ESERIES
|
||||
bool "PXA based Toshiba e-series PDAs"
|
||||
select FB_W100
|
||||
select FB
|
||||
select PXA25x
|
||||
|
||||
config MACH_E330
|
||||
|
|
|
@ -17,11 +17,15 @@
|
|||
|
||||
#include <mach/regs-ost.h>
|
||||
|
||||
#define xip_irqpending() (ICIP & ICMR)
|
||||
/* restored July 2017, this did not build since 2011! */
|
||||
|
||||
#define ICIP io_p2v(0x40d00000)
|
||||
#define ICMR io_p2v(0x40d00004)
|
||||
#define xip_irqpending() (readl(ICIP) & readl(ICMR))
|
||||
|
||||
/* we sample OSCR and convert desired delta to usec (1/4 ~= 1000000/3686400) */
|
||||
#define xip_currtime() (OSCR)
|
||||
#define xip_elapsed_since(x) (signed)((OSCR - (x)) / 4)
|
||||
#define xip_currtime() readl(OSCR)
|
||||
#define xip_elapsed_since(x) (signed)((readl(OSCR) - (x)) / 4)
|
||||
|
||||
/*
|
||||
* xip_cpu_idle() is used when waiting for a delay equal or larger than
|
||||
|
|
|
@ -25,8 +25,8 @@
|
|||
* *_SIZE is the size of the region
|
||||
* *_BASE is the virtual address
|
||||
*/
|
||||
#define RAM_SIZE 0x10000000
|
||||
#define RAM_START 0x10000000
|
||||
#define RPC_RAM_SIZE 0x10000000
|
||||
#define RPC_RAM_START 0x10000000
|
||||
|
||||
#define EASI_SIZE 0x08000000 /* EASI I/O */
|
||||
#define EASI_START 0x08000000
|
||||
|
|
|
@ -35,6 +35,31 @@ struct clk clk_##_name = { \
|
|||
|
||||
static DEFINE_SPINLOCK(clocks_lock);
|
||||
|
||||
/* Dummy clk routine to build generic kernel parts that may be using them */
|
||||
long clk_round_rate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
return clk_get_rate(clk);
|
||||
}
|
||||
EXPORT_SYMBOL(clk_round_rate);
|
||||
|
||||
int clk_set_rate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_set_rate);
|
||||
|
||||
int clk_set_parent(struct clk *clk, struct clk *parent)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_set_parent);
|
||||
|
||||
struct clk *clk_get_parent(struct clk *clk)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get_parent);
|
||||
|
||||
static void clk_gpio27_enable(struct clk *clk)
|
||||
{
|
||||
/*
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#define xip_irqpending() (ICIP & ICMR)
|
||||
|
||||
/* we sample OSCR and convert desired delta to usec (1/4 ~= 1000000/3686400) */
|
||||
#define xip_currtime() (OSCR)
|
||||
#define xip_elapsed_since(x) (signed)((OSCR - (x)) / 4)
|
||||
#define xip_currtime() readl_relaxed(OSCR)
|
||||
#define xip_elapsed_since(x) (signed)((readl_relaxed(OSCR) - (x)) / 4)
|
||||
|
||||
#endif /* __ARCH_SA1100_MTD_XIP_H__ */
|
||||
|
|
|
@ -67,8 +67,12 @@ static int regulator_quirk_notify(struct notifier_block *nb,
|
|||
{
|
||||
struct device *dev = data;
|
||||
struct i2c_client *client;
|
||||
static bool done;
|
||||
u32 mon;
|
||||
|
||||
if (done)
|
||||
return 0;
|
||||
|
||||
mon = ioread32(irqc + IRQC_MONITOR);
|
||||
dev_dbg(dev, "%s: %ld, IRQC_MONITOR = 0x%x\n", __func__, action, mon);
|
||||
if (mon & REGULATOR_IRQ_MASK)
|
||||
|
@ -99,7 +103,7 @@ static int regulator_quirk_notify(struct notifier_block *nb,
|
|||
remove:
|
||||
dev_info(dev, "IRQ2 is not asserted, removing quirk\n");
|
||||
|
||||
bus_unregister_notifier(&i2c_bus_type, nb);
|
||||
done = true;
|
||||
iounmap(irqc);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -133,6 +133,7 @@ static irqreturn_t db8500_pmu_handler(int irq, void *dev, irq_handler_t handler)
|
|||
|
||||
static struct arm_pmu_platdata db8500_pmu_platdata = {
|
||||
.handle_irq = db8500_pmu_handler,
|
||||
.irq_flags = IRQF_NOBALANCING | IRQF_NO_THREAD,
|
||||
};
|
||||
|
||||
static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = {
|
||||
|
|
|
@ -93,3 +93,32 @@ void nuc900_subclk_enable(struct clk *clk, int enable)
|
|||
|
||||
__raw_writel(clken, W90X900_VA_CLKPWR + SUBCLK);
|
||||
}
|
||||
|
||||
/* dummy functions, should not be called */
|
||||
long clk_round_rate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
WARN_ON(clk);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_round_rate);
|
||||
|
||||
int clk_set_rate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
WARN_ON(clk);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_set_rate);
|
||||
|
||||
int clk_set_parent(struct clk *clk, struct clk *parent)
|
||||
{
|
||||
WARN_ON(clk);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_set_parent);
|
||||
|
||||
struct clk *clk_get_parent(struct clk *clk)
|
||||
{
|
||||
WARN_ON(clk);
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get_parent);
|
||||
|
|
|
@ -40,9 +40,21 @@ static void *arm_nommu_dma_alloc(struct device *dev, size_t size,
|
|||
|
||||
{
|
||||
const struct dma_map_ops *ops = &dma_noop_ops;
|
||||
void *ret;
|
||||
|
||||
/*
|
||||
* We are here because:
|
||||
* Try generic allocator first if we are advertised that
|
||||
* consistency is not required.
|
||||
*/
|
||||
|
||||
if (attrs & DMA_ATTR_NON_CONSISTENT)
|
||||
return ops->alloc(dev, size, dma_handle, gfp, attrs);
|
||||
|
||||
ret = dma_alloc_from_global_coherent(size, dma_handle);
|
||||
|
||||
/*
|
||||
* dma_alloc_from_global_coherent() may fail because:
|
||||
*
|
||||
* - no consistent DMA region has been defined, so we can't
|
||||
* continue.
|
||||
* - there is no space left in consistent DMA region, so we
|
||||
|
@ -50,11 +62,8 @@ static void *arm_nommu_dma_alloc(struct device *dev, size_t size,
|
|||
* advertised that consistency is not required.
|
||||
*/
|
||||
|
||||
if (attrs & DMA_ATTR_NON_CONSISTENT)
|
||||
return ops->alloc(dev, size, dma_handle, gfp, attrs);
|
||||
|
||||
WARN_ON_ONCE(1);
|
||||
return NULL;
|
||||
WARN_ON_ONCE(ret == NULL);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void arm_nommu_dma_free(struct device *dev, size_t size,
|
||||
|
@ -63,14 +72,31 @@ static void arm_nommu_dma_free(struct device *dev, size_t size,
|
|||
{
|
||||
const struct dma_map_ops *ops = &dma_noop_ops;
|
||||
|
||||
if (attrs & DMA_ATTR_NON_CONSISTENT)
|
||||
if (attrs & DMA_ATTR_NON_CONSISTENT) {
|
||||
ops->free(dev, size, cpu_addr, dma_addr, attrs);
|
||||
else
|
||||
WARN_ON_ONCE(1);
|
||||
} else {
|
||||
int ret = dma_release_from_global_coherent(get_order(size),
|
||||
cpu_addr);
|
||||
|
||||
WARN_ON_ONCE(ret == 0);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static int arm_nommu_dma_mmap(struct device *dev, struct vm_area_struct *vma,
|
||||
void *cpu_addr, dma_addr_t dma_addr, size_t size,
|
||||
unsigned long attrs)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (dma_mmap_from_global_coherent(vma, cpu_addr, size, &ret))
|
||||
return ret;
|
||||
|
||||
return dma_common_mmap(dev, vma, cpu_addr, dma_addr, size);
|
||||
}
|
||||
|
||||
|
||||
static void __dma_page_cpu_to_dev(phys_addr_t paddr, size_t size,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
|
@ -173,6 +199,7 @@ static void arm_nommu_dma_sync_sg_for_cpu(struct device *dev, struct scatterlist
|
|||
const struct dma_map_ops arm_nommu_dma_ops = {
|
||||
.alloc = arm_nommu_dma_alloc,
|
||||
.free = arm_nommu_dma_free,
|
||||
.mmap = arm_nommu_dma_mmap,
|
||||
.map_page = arm_nommu_dma_map_page,
|
||||
.unmap_page = arm_nommu_dma_unmap_page,
|
||||
.map_sg = arm_nommu_dma_map_sg,
|
||||
|
|
|
@ -851,7 +851,7 @@ static int __arm_dma_mmap(struct device *dev, struct vm_area_struct *vma,
|
|||
unsigned long pfn = dma_to_pfn(dev, dma_addr);
|
||||
unsigned long off = vma->vm_pgoff;
|
||||
|
||||
if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
return ret;
|
||||
|
||||
if (off < nr_pages && nr_vma_pages <= (nr_pages - off)) {
|
||||
|
|
|
@ -452,7 +452,7 @@
|
|||
emac: ethernet@1c30000 {
|
||||
compatible = "allwinner,sun50i-a64-emac";
|
||||
syscon = <&syscon>;
|
||||
reg = <0x01c30000 0x100>;
|
||||
reg = <0x01c30000 0x10000>;
|
||||
interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "macirq";
|
||||
resets = <&ccu RST_BUS_EMAC>;
|
||||
|
|
|
@ -400,7 +400,7 @@
|
|||
};
|
||||
|
||||
pwm_AO_ab: pwm@550 {
|
||||
compatible = "amlogic,meson-gx-pwm", "amlogic,meson-gxbb-pwm";
|
||||
compatible = "amlogic,meson-gx-ao-pwm", "amlogic,meson-gxbb-ao-pwm";
|
||||
reg = <0x0 0x00550 0x0 0x10>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
|
|
|
@ -109,8 +109,8 @@
|
|||
status = "okay";
|
||||
pinctrl-0 = <&pwm_ao_a_3_pins>, <&pwm_ao_b_pins>;
|
||||
pinctrl-names = "default";
|
||||
clocks = <&clkc CLKID_FCLK_DIV4>;
|
||||
clock-names = "clkin0";
|
||||
clocks = <&xtal> , <&xtal>;
|
||||
clock-names = "clkin0", "clkin1" ;
|
||||
};
|
||||
|
||||
&pwm_ef {
|
||||
|
|
|
@ -10,12 +10,20 @@
|
|||
|
||||
#include <dt-bindings/input/input.h>
|
||||
|
||||
#include "meson-gxl-s905x-p212.dtsi"
|
||||
#include "meson-gxl-s905x.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "libretech,cc", "amlogic,s905x", "amlogic,meson-gxl";
|
||||
model = "Libre Technology CC";
|
||||
|
||||
aliases {
|
||||
serial0 = &uart_AO;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
};
|
||||
|
||||
cvbs-connector {
|
||||
compatible = "composite-video-connector";
|
||||
|
||||
|
@ -26,6 +34,11 @@
|
|||
};
|
||||
};
|
||||
|
||||
emmc_pwrseq: emmc-pwrseq {
|
||||
compatible = "mmc-pwrseq-emmc";
|
||||
reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
hdmi-connector {
|
||||
compatible = "hdmi-connector";
|
||||
type = "a";
|
||||
|
@ -53,6 +66,39 @@
|
|||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
};
|
||||
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x0 0x0 0x80000000>;
|
||||
};
|
||||
|
||||
vcc_3v3: regulator-vcc_3v3 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "VCC_3V3";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
};
|
||||
|
||||
vcc_card: regulator-vcc-card {
|
||||
compatible = "regulator-gpio";
|
||||
|
||||
regulator-name = "VCC_CARD";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
|
||||
gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_HIGH>;
|
||||
gpios-states = <0>;
|
||||
|
||||
states = <3300000 0>,
|
||||
<1800000 1>;
|
||||
};
|
||||
|
||||
vddio_boot: regulator-vddio_boot {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "VDDIO_BOOT";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
};
|
||||
};
|
||||
|
||||
&cvbs_vdac_port {
|
||||
|
@ -61,6 +107,16 @@
|
|||
};
|
||||
};
|
||||
|
||||
ðmac {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&ir {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&remote_input_ao_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&hdmi_tx {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
|
||||
|
@ -73,20 +129,43 @@
|
|||
};
|
||||
};
|
||||
|
||||
/*
|
||||
* The following devices exists but are exposed on the general
|
||||
* purpose GPIO header. End user may well decide to use those pins
|
||||
* for another purpose
|
||||
*/
|
||||
/* SD card */
|
||||
&sd_emmc_b {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&sdcard_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
&sd_emmc_a {
|
||||
status = "disabled";
|
||||
bus-width = <4>;
|
||||
cap-sd-highspeed;
|
||||
max-frequency = <100000000>;
|
||||
disable-wp;
|
||||
|
||||
cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_HIGH>;
|
||||
cd-inverted;
|
||||
|
||||
vmmc-supply = <&vcc_3v3>;
|
||||
vqmmc-supply = <&vcc_card>;
|
||||
};
|
||||
|
||||
&uart_A {
|
||||
status = "disabled";
|
||||
/* eMMC */
|
||||
&sd_emmc_c {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&emmc_pins>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
bus-width = <8>;
|
||||
cap-mmc-highspeed;
|
||||
max-frequency = <50000000>;
|
||||
non-removable;
|
||||
disable-wp;
|
||||
|
||||
mmc-pwrseq = <&emmc_pwrseq>;
|
||||
vmmc-supply = <&vcc_3v3>;
|
||||
vqmmc-supply = <&vddio_boot>;
|
||||
};
|
||||
|
||||
&wifi32k {
|
||||
status = "disabled";
|
||||
&uart_AO {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&uart_ao_a_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
|
|
@ -219,7 +219,7 @@
|
|||
reg = <0x18800 0x100>, <0x18C00 0x20>;
|
||||
gpiosb: gpio {
|
||||
#gpio-cells = <2>;
|
||||
gpio-ranges = <&pinctrl_sb 0 0 29>;
|
||||
gpio-ranges = <&pinctrl_sb 0 0 30>;
|
||||
gpio-controller;
|
||||
interrupts =
|
||||
<GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>,
|
||||
|
|
|
@ -270,6 +270,7 @@
|
|||
interrupt-names = "mem", "ring0", "ring1",
|
||||
"ring2", "ring3", "eip";
|
||||
clocks = <&cpm_clk 1 26>;
|
||||
dma-coherent;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
compatible = "marvell,armada-8k-rtc";
|
||||
reg = <0x284000 0x20>, <0x284080 0x24>;
|
||||
reg-names = "rtc", "rtc-soc";
|
||||
interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <ICU_GRP_NSR 77 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
cps_ethernet: ethernet@0 {
|
||||
|
@ -261,6 +261,7 @@
|
|||
interrupt-names = "mem", "ring0", "ring1",
|
||||
"ring2", "ring3", "eip";
|
||||
clocks = <&cps_clk 1 26>;
|
||||
dma-coherent;
|
||||
/*
|
||||
* The cryptographic engine found on the cp110
|
||||
* master is enabled by default at the SoC
|
||||
|
|
|
@ -508,7 +508,7 @@
|
|||
|
||||
/* audio_clkout0/1/2/3 */
|
||||
#clock-cells = <1>;
|
||||
clock-frequency = <11289600 12288000>;
|
||||
clock-frequency = <12288000 11289600>;
|
||||
|
||||
status = "okay";
|
||||
|
||||
|
|
|
@ -281,7 +281,7 @@
|
|||
|
||||
/* audio_clkout0/1/2/3 */
|
||||
#clock-cells = <1>;
|
||||
clock-frequency = <11289600 12288000>;
|
||||
clock-frequency = <12288000 11289600>;
|
||||
|
||||
status = "okay";
|
||||
|
||||
|
|
|
@ -476,6 +476,7 @@ CONFIG_QCOM_CLK_SMD_RPM=y
|
|||
CONFIG_MSM_GCC_8916=y
|
||||
CONFIG_MSM_GCC_8994=y
|
||||
CONFIG_MSM_MMCC_8996=y
|
||||
CONFIG_HWSPINLOCK=y
|
||||
CONFIG_HWSPINLOCK_QCOM=y
|
||||
CONFIG_ARM_MHU=y
|
||||
CONFIG_PLATFORM_MHU=y
|
||||
|
|
|
@ -435,7 +435,7 @@ static inline long atomic64_dec_if_positive(atomic64_t *v)
|
|||
" sub x30, x30, %[ret]\n"
|
||||
" cbnz x30, 1b\n"
|
||||
"2:")
|
||||
: [ret] "+&r" (x0), [v] "+Q" (v->counter)
|
||||
: [ret] "+r" (x0), [v] "+Q" (v->counter)
|
||||
:
|
||||
: __LL_SC_CLOBBERS, "cc", "memory");
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#ifdef CONFIG_GENERIC_BUG
|
||||
|
||||
#define __BUG_ENTRY(flags) \
|
||||
".pushsection __bug_table,\"a\"\n\t" \
|
||||
".pushsection __bug_table,\"aw\"\n\t" \
|
||||
".align 2\n\t" \
|
||||
"0: .long 1f - 0b\n\t" \
|
||||
_BUGVERBOSE_LOCATION(__FILE__, __LINE__) \
|
||||
|
|
|
@ -64,8 +64,10 @@
|
|||
* TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area.
|
||||
*/
|
||||
#define VA_BITS (CONFIG_ARM64_VA_BITS)
|
||||
#define VA_START (UL(0xffffffffffffffff) << VA_BITS)
|
||||
#define PAGE_OFFSET (UL(0xffffffffffffffff) << (VA_BITS - 1))
|
||||
#define VA_START (UL(0xffffffffffffffff) - \
|
||||
(UL(1) << VA_BITS) + 1)
|
||||
#define PAGE_OFFSET (UL(0xffffffffffffffff) - \
|
||||
(UL(1) << (VA_BITS - 1)) + 1)
|
||||
#define KIMAGE_VADDR (MODULES_END)
|
||||
#define MODULES_END (MODULES_VADDR + MODULES_VSIZE)
|
||||
#define MODULES_VADDR (VA_START + KASAN_SHADOW_SIZE)
|
||||
|
|
|
@ -492,7 +492,7 @@ asm(
|
|||
* the "%x0" template means XZR.
|
||||
*/
|
||||
#define write_sysreg(v, r) do { \
|
||||
u64 __val = (u64)v; \
|
||||
u64 __val = (u64)(v); \
|
||||
asm volatile("msr " __stringify(r) ", %x0" \
|
||||
: : "rZ" (__val)); \
|
||||
} while (0)
|
||||
|
@ -508,7 +508,7 @@ asm(
|
|||
})
|
||||
|
||||
#define write_sysreg_s(v, r) do { \
|
||||
u64 __val = (u64)v; \
|
||||
u64 __val = (u64)(v); \
|
||||
asm volatile("msr_s " __stringify(r) ", %x0" : : "rZ" (__val)); \
|
||||
} while (0)
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ static inline void set_fs(mm_segment_t fs)
|
|||
*/
|
||||
#define __range_ok(addr, size) \
|
||||
({ \
|
||||
unsigned long __addr = (unsigned long __force)(addr); \
|
||||
unsigned long __addr = (unsigned long)(addr); \
|
||||
unsigned long flag, roksum; \
|
||||
__chk_user_ptr(addr); \
|
||||
asm("adds %1, %1, %3; ccmp %1, %4, #2, cc; cset %0, ls" \
|
||||
|
|
|
@ -82,8 +82,8 @@ static const char *__init cpu_read_enable_method(int cpu)
|
|||
* Don't warn spuriously.
|
||||
*/
|
||||
if (cpu != 0)
|
||||
pr_err("%s: missing enable-method property\n",
|
||||
dn->full_name);
|
||||
pr_err("%pOF: missing enable-method property\n",
|
||||
dn);
|
||||
}
|
||||
} else {
|
||||
enable_method = acpi_get_enable_method(cpu);
|
||||
|
|
|
@ -469,7 +469,7 @@ static u64 __init of_get_cpu_mpidr(struct device_node *dn)
|
|||
*/
|
||||
cell = of_get_property(dn, "reg", NULL);
|
||||
if (!cell) {
|
||||
pr_err("%s: missing reg property\n", dn->full_name);
|
||||
pr_err("%pOF: missing reg property\n", dn);
|
||||
return INVALID_HWID;
|
||||
}
|
||||
|
||||
|
@ -478,7 +478,7 @@ static u64 __init of_get_cpu_mpidr(struct device_node *dn)
|
|||
* Non affinity bits must be set to 0 in the DT
|
||||
*/
|
||||
if (hwid & ~MPIDR_HWID_BITMASK) {
|
||||
pr_err("%s: invalid reg property\n", dn->full_name);
|
||||
pr_err("%pOF: invalid reg property\n", dn);
|
||||
return INVALID_HWID;
|
||||
}
|
||||
return hwid;
|
||||
|
@ -627,8 +627,8 @@ static void __init of_parse_and_init_cpus(void)
|
|||
goto next;
|
||||
|
||||
if (is_mpidr_duplicate(cpu_count, hwid)) {
|
||||
pr_err("%s: duplicate cpu reg properties in the DT\n",
|
||||
dn->full_name);
|
||||
pr_err("%pOF: duplicate cpu reg properties in the DT\n",
|
||||
dn);
|
||||
goto next;
|
||||
}
|
||||
|
||||
|
@ -640,8 +640,8 @@ static void __init of_parse_and_init_cpus(void)
|
|||
*/
|
||||
if (hwid == cpu_logical_map(0)) {
|
||||
if (bootcpu_valid) {
|
||||
pr_err("%s: duplicate boot cpu reg property in DT\n",
|
||||
dn->full_name);
|
||||
pr_err("%pOF: duplicate boot cpu reg property in DT\n",
|
||||
dn);
|
||||
goto next;
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ static int __init get_cpu_for_node(struct device_node *node)
|
|||
}
|
||||
}
|
||||
|
||||
pr_crit("Unable to find CPU node for %s\n", cpu_node->full_name);
|
||||
pr_crit("Unable to find CPU node for %pOF\n", cpu_node);
|
||||
|
||||
of_node_put(cpu_node);
|
||||
return -1;
|
||||
|
@ -71,8 +71,8 @@ static int __init parse_core(struct device_node *core, int cluster_id,
|
|||
cpu_topology[cpu].core_id = core_id;
|
||||
cpu_topology[cpu].thread_id = i;
|
||||
} else {
|
||||
pr_err("%s: Can't get CPU for thread\n",
|
||||
t->full_name);
|
||||
pr_err("%pOF: Can't get CPU for thread\n",
|
||||
t);
|
||||
of_node_put(t);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -84,15 +84,15 @@ static int __init parse_core(struct device_node *core, int cluster_id,
|
|||
cpu = get_cpu_for_node(core);
|
||||
if (cpu >= 0) {
|
||||
if (!leaf) {
|
||||
pr_err("%s: Core has both threads and CPU\n",
|
||||
core->full_name);
|
||||
pr_err("%pOF: Core has both threads and CPU\n",
|
||||
core);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
cpu_topology[cpu].cluster_id = cluster_id;
|
||||
cpu_topology[cpu].core_id = core_id;
|
||||
} else if (leaf) {
|
||||
pr_err("%s: Can't get CPU for leaf core\n", core->full_name);
|
||||
pr_err("%pOF: Can't get CPU for leaf core\n", core);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -137,8 +137,8 @@ static int __init parse_cluster(struct device_node *cluster, int depth)
|
|||
has_cores = true;
|
||||
|
||||
if (depth == 0) {
|
||||
pr_err("%s: cpu-map children should be clusters\n",
|
||||
c->full_name);
|
||||
pr_err("%pOF: cpu-map children should be clusters\n",
|
||||
c);
|
||||
of_node_put(c);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -146,8 +146,8 @@ static int __init parse_cluster(struct device_node *cluster, int depth)
|
|||
if (leaf) {
|
||||
ret = parse_core(c, cluster_id, core_id++);
|
||||
} else {
|
||||
pr_err("%s: Non-leaf cluster with core %s\n",
|
||||
cluster->full_name, name);
|
||||
pr_err("%pOF: Non-leaf cluster with core %s\n",
|
||||
cluster, name);
|
||||
ret = -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -159,7 +159,7 @@ static int __init parse_cluster(struct device_node *cluster, int depth)
|
|||
} while (c);
|
||||
|
||||
if (leaf && !has_cores)
|
||||
pr_warn("%s: empty cluster\n", cluster->full_name);
|
||||
pr_warn("%pOF: empty cluster\n", cluster);
|
||||
|
||||
if (leaf)
|
||||
cluster_id++;
|
||||
|
|
|
@ -274,10 +274,12 @@ static DEFINE_RAW_SPINLOCK(die_lock);
|
|||
void die(const char *str, struct pt_regs *regs, int err)
|
||||
{
|
||||
int ret;
|
||||
unsigned long flags;
|
||||
|
||||
raw_spin_lock_irqsave(&die_lock, flags);
|
||||
|
||||
oops_enter();
|
||||
|
||||
raw_spin_lock_irq(&die_lock);
|
||||
console_verbose();
|
||||
bust_spinlocks(1);
|
||||
ret = __die(str, err, regs);
|
||||
|
@ -287,13 +289,15 @@ void die(const char *str, struct pt_regs *regs, int err)
|
|||
|
||||
bust_spinlocks(0);
|
||||
add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
|
||||
raw_spin_unlock_irq(&die_lock);
|
||||
oops_exit();
|
||||
|
||||
if (in_interrupt())
|
||||
panic("Fatal exception in interrupt");
|
||||
if (panic_on_oops)
|
||||
panic("Fatal exception");
|
||||
|
||||
raw_spin_unlock_irqrestore(&die_lock, flags);
|
||||
|
||||
if (ret != NOTIFY_STOP)
|
||||
do_exit(SIGSEGV);
|
||||
}
|
||||
|
@ -519,7 +523,7 @@ static void cntfrq_read_handler(unsigned int esr, struct pt_regs *regs)
|
|||
{
|
||||
int rt = (esr & ESR_ELx_SYS64_ISS_RT_MASK) >> ESR_ELx_SYS64_ISS_RT_SHIFT;
|
||||
|
||||
pt_regs_write_reg(regs, rt, read_sysreg(cntfrq_el0));
|
||||
pt_regs_write_reg(regs, rt, arch_timer_get_rate());
|
||||
regs->pc += 4;
|
||||
}
|
||||
|
||||
|
|
|
@ -764,7 +764,7 @@ static bool access_pmovs(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
|
|||
if (p->is_write) {
|
||||
if (r->CRm & 0x2)
|
||||
/* accessing PMOVSSET_EL0 */
|
||||
kvm_pmu_overflow_set(vcpu, p->regval & mask);
|
||||
vcpu_sys_reg(vcpu, PMOVSSET_EL0) |= (p->regval & mask);
|
||||
else
|
||||
/* accessing PMOVSCLR_EL0 */
|
||||
vcpu_sys_reg(vcpu, PMOVSSET_EL0) &= ~(p->regval & mask);
|
||||
|
|
|
@ -30,9 +30,10 @@
|
|||
*/
|
||||
ENTRY(copy_page)
|
||||
alternative_if ARM64_HAS_NO_HW_PREFETCH
|
||||
# Prefetch two cache lines ahead.
|
||||
prfm pldl1strm, [x1, #128]
|
||||
prfm pldl1strm, [x1, #256]
|
||||
// Prefetch three cache lines ahead.
|
||||
prfm pldl1strm, [x1, #128]
|
||||
prfm pldl1strm, [x1, #256]
|
||||
prfm pldl1strm, [x1, #384]
|
||||
alternative_else_nop_endif
|
||||
|
||||
ldp x2, x3, [x1]
|
||||
|
@ -50,7 +51,7 @@ alternative_else_nop_endif
|
|||
subs x18, x18, #128
|
||||
|
||||
alternative_if ARM64_HAS_NO_HW_PREFETCH
|
||||
prfm pldl1strm, [x1, #384]
|
||||
prfm pldl1strm, [x1, #384]
|
||||
alternative_else_nop_endif
|
||||
|
||||
stnp x2, x3, [x0]
|
||||
|
|
|
@ -329,7 +329,7 @@ static int __swiotlb_mmap(struct device *dev,
|
|||
vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot,
|
||||
is_device_dma_coherent(dev));
|
||||
|
||||
if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
return ret;
|
||||
|
||||
return __swiotlb_mmap_pfn(vma, pfn, size);
|
||||
|
@ -706,7 +706,7 @@ static int __iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma,
|
|||
vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot,
|
||||
is_device_dma_coherent(dev));
|
||||
|
||||
if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
return ret;
|
||||
|
||||
if (attrs & DMA_ATTR_FORCE_CONTIGUOUS) {
|
||||
|
|
|
@ -163,26 +163,27 @@ int ptep_set_access_flags(struct vm_area_struct *vma,
|
|||
/* only preserve the access flags and write permission */
|
||||
pte_val(entry) &= PTE_AF | PTE_WRITE | PTE_DIRTY;
|
||||
|
||||
/*
|
||||
* PTE_RDONLY is cleared by default in the asm below, so set it in
|
||||
* back if necessary (read-only or clean PTE).
|
||||
*/
|
||||
/* set PTE_RDONLY if actual read-only or clean PTE */
|
||||
if (!pte_write(entry) || !pte_sw_dirty(entry))
|
||||
pte_val(entry) |= PTE_RDONLY;
|
||||
|
||||
/*
|
||||
* Setting the flags must be done atomically to avoid racing with the
|
||||
* hardware update of the access/dirty state.
|
||||
* hardware update of the access/dirty state. The PTE_RDONLY bit must
|
||||
* be set to the most permissive (lowest value) of *ptep and entry
|
||||
* (calculated as: a & b == ~(~a | ~b)).
|
||||
*/
|
||||
pte_val(entry) ^= PTE_RDONLY;
|
||||
asm volatile("// ptep_set_access_flags\n"
|
||||
" prfm pstl1strm, %2\n"
|
||||
"1: ldxr %0, %2\n"
|
||||
" and %0, %0, %3 // clear PTE_RDONLY\n"
|
||||
" eor %0, %0, %3 // negate PTE_RDONLY in *ptep\n"
|
||||
" orr %0, %0, %4 // set flags\n"
|
||||
" eor %0, %0, %3 // negate final PTE_RDONLY\n"
|
||||
" stxr %w1, %0, %2\n"
|
||||
" cbnz %w1, 1b\n"
|
||||
: "=&r" (old_pteval), "=&r" (tmp), "+Q" (pte_val(*ptep))
|
||||
: "L" (~PTE_RDONLY), "r" (pte_val(entry)));
|
||||
: "L" (PTE_RDONLY), "r" (pte_val(entry)));
|
||||
|
||||
flush_tlb_fix_spurious_fault(vma, address);
|
||||
return 1;
|
||||
|
|
|
@ -496,7 +496,7 @@ void mark_rodata_ro(void)
|
|||
|
||||
static void __init map_kernel_segment(pgd_t *pgd, void *va_start, void *va_end,
|
||||
pgprot_t prot, struct vm_struct *vma,
|
||||
int flags)
|
||||
int flags, unsigned long vm_flags)
|
||||
{
|
||||
phys_addr_t pa_start = __pa_symbol(va_start);
|
||||
unsigned long size = va_end - va_start;
|
||||
|
@ -507,10 +507,13 @@ static void __init map_kernel_segment(pgd_t *pgd, void *va_start, void *va_end,
|
|||
__create_pgd_mapping(pgd, pa_start, (unsigned long)va_start, size, prot,
|
||||
early_pgtable_alloc, flags);
|
||||
|
||||
if (!(vm_flags & VM_NO_GUARD))
|
||||
size += PAGE_SIZE;
|
||||
|
||||
vma->addr = va_start;
|
||||
vma->phys_addr = pa_start;
|
||||
vma->size = size;
|
||||
vma->flags = VM_MAP;
|
||||
vma->flags = VM_MAP | vm_flags;
|
||||
vma->caller = __builtin_return_address(0);
|
||||
|
||||
vm_area_add_early(vma);
|
||||
|
@ -541,14 +544,15 @@ static void __init map_kernel(pgd_t *pgd)
|
|||
* Only rodata will be remapped with different permissions later on,
|
||||
* all other segments are allowed to use contiguous mappings.
|
||||
*/
|
||||
map_kernel_segment(pgd, _text, _etext, text_prot, &vmlinux_text, 0);
|
||||
map_kernel_segment(pgd, _text, _etext, text_prot, &vmlinux_text, 0,
|
||||
VM_NO_GUARD);
|
||||
map_kernel_segment(pgd, __start_rodata, __inittext_begin, PAGE_KERNEL,
|
||||
&vmlinux_rodata, NO_CONT_MAPPINGS);
|
||||
&vmlinux_rodata, NO_CONT_MAPPINGS, VM_NO_GUARD);
|
||||
map_kernel_segment(pgd, __inittext_begin, __inittext_end, text_prot,
|
||||
&vmlinux_inittext, 0);
|
||||
&vmlinux_inittext, 0, VM_NO_GUARD);
|
||||
map_kernel_segment(pgd, __initdata_begin, __initdata_end, PAGE_KERNEL,
|
||||
&vmlinux_initdata, 0);
|
||||
map_kernel_segment(pgd, _data, _end, PAGE_KERNEL, &vmlinux_data, 0);
|
||||
&vmlinux_initdata, 0, VM_NO_GUARD);
|
||||
map_kernel_segment(pgd, _data, _end, PAGE_KERNEL, &vmlinux_data, 0, 0);
|
||||
|
||||
if (!pgd_val(*pgd_offset_raw(pgd, FIXADDR_START))) {
|
||||
/*
|
||||
|
|
|
@ -208,8 +208,6 @@ int __init numa_add_memblk(int nid, u64 start, u64 end)
|
|||
}
|
||||
|
||||
node_set(nid, numa_nodes_parsed);
|
||||
pr_info("Adding memblock [0x%llx - 0x%llx] on node %d\n",
|
||||
start, (end - 1), nid);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -223,10 +221,7 @@ static void __init setup_node_data(int nid, u64 start_pfn, u64 end_pfn)
|
|||
void *nd;
|
||||
int tnid;
|
||||
|
||||
if (start_pfn < end_pfn)
|
||||
pr_info("Initmem setup node %d [mem %#010Lx-%#010Lx]\n", nid,
|
||||
start_pfn << PAGE_SHIFT, (end_pfn << PAGE_SHIFT) - 1);
|
||||
else
|
||||
if (start_pfn >= end_pfn)
|
||||
pr_info("Initmem setup node %d [<memory-less node>]\n", nid);
|
||||
|
||||
nd_pa = memblock_alloc_try_nid(nd_size, SMP_CACHE_BYTES, nid);
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#define _BUG_OR_WARN(flags) \
|
||||
asm volatile( \
|
||||
"1: .hword %0\n" \
|
||||
" .section __bug_table,\"a\",@progbits\n" \
|
||||
" .section __bug_table,\"aw\",@progbits\n" \
|
||||
"2: .long 1b\n" \
|
||||
" .long %1\n" \
|
||||
" .short %2\n" \
|
||||
|
@ -38,7 +38,7 @@
|
|||
#define _BUG_OR_WARN(flags) \
|
||||
asm volatile( \
|
||||
"1: .hword %0\n" \
|
||||
" .section __bug_table,\"a\",@progbits\n" \
|
||||
" .section __bug_table,\"aw\",@progbits\n" \
|
||||
"2: .long 1b\n" \
|
||||
" .short %1\n" \
|
||||
" .org 2b + %2\n" \
|
||||
|
|
|
@ -44,8 +44,7 @@ flat_get_relocate_addr (unsigned long relval)
|
|||
return relval & 0x03ffffff; /* Mask out top 6 bits */
|
||||
}
|
||||
|
||||
static inline int flat_set_persistent(unsigned long relval,
|
||||
unsigned long *persistent)
|
||||
static inline int flat_set_persistent(u32 relval, u32 *persistent)
|
||||
{
|
||||
int type = (relval >> 26) & 7;
|
||||
if (type == 3) {
|
||||
|
|
|
@ -32,7 +32,7 @@ unsigned long bfin_get_addr_from_rp(u32 *ptr,
|
|||
break;
|
||||
|
||||
case FLAT_BFIN_RELOC_TYPE_32_BIT:
|
||||
pr_debug("*ptr = %lx", get_unaligned(ptr));
|
||||
pr_debug("*ptr = %x", get_unaligned(ptr));
|
||||
val = get_unaligned(ptr);
|
||||
break;
|
||||
|
||||
|
@ -77,7 +77,7 @@ void bfin_put_addr_at_rp(u32 *ptr, u32 addr, u32 relval)
|
|||
|
||||
case FLAT_BFIN_RELOC_TYPE_32_BIT:
|
||||
put_unaligned(addr, ptr);
|
||||
pr_debug("new ptr =%lx", get_unaligned(ptr));
|
||||
pr_debug("new ptr =%x", get_unaligned(ptr));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ static inline int flat_get_addr_from_rp(u32 __user *rp, u32 relval, u32 flags,
|
|||
u32 *addr, u32 *persistent)
|
||||
{
|
||||
u32 val = get_unaligned((__force u32 *)rp);
|
||||
if (!(flags & FLAT_FLAG_GOTPIC)
|
||||
if (!(flags & FLAT_FLAG_GOTPIC))
|
||||
val &= 0x00ffffff;
|
||||
*addr = val;
|
||||
return 0;
|
||||
|
|
|
@ -30,8 +30,7 @@ static inline int flat_put_addr_at_rp(u32 __user *rp, u32 addr, u32 rel)
|
|||
}
|
||||
#define flat_get_relocate_addr(rel) (rel)
|
||||
|
||||
static inline int flat_set_persistent(unsigned long relval,
|
||||
unsigned long *persistent)
|
||||
static inline int flat_set_persistent(u32 relval, u32 *persistent)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
#ifndef _RALINK_REGS_H_
|
||||
#define _RALINK_REGS_H_
|
||||
|
||||
#include <linux/io.h>
|
||||
|
||||
enum ralink_soc_type {
|
||||
RALINK_UNKNOWN = 0,
|
||||
RT2880_SOC,
|
||||
|
|
|
@ -91,7 +91,7 @@
|
|||
#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */
|
||||
#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */
|
||||
#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */
|
||||
#define TIOCGPTPEER _IOR('T', 0x41, int) /* Safely open the slave */
|
||||
#define TIOCGPTPEER _IO('T', 0x41) /* Safely open the slave */
|
||||
|
||||
/* I hope the range from 0x5480 on is free ... */
|
||||
#define TIOCSCTTY 0x5480 /* become controlling tty */
|
||||
|
|
|
@ -232,7 +232,7 @@ static int mips_dma_mmap(struct device *dev, struct vm_area_struct *vma,
|
|||
else
|
||||
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||
|
||||
if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
|
||||
return ret;
|
||||
|
||||
if (off < count && user_count <= (count - off)) {
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/bug.h>
|
||||
|
||||
#include <asm/mipsregs.h>
|
||||
#include <asm/mach-ralink/ralink_regs.h>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue