mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-20 13:41:30 +00:00
A collection of ARM SoC fixes for v3.14-rc1.
Mostly a collection of Kconfig, device tree data and compilation fixes along with fix to drivers/phy that fixes a boot regression on some Marvell mvebu platforms. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.14 (GNU/Linux) iQIcBAABAgAGBQJS/o3LAAoJEFk3GJrT+8ZlNUEP/1k2zAaEJSB4Lf47jWszKnQ/ 8tyY+2B5mcaziCIA+zVVGsjOpOEt7lBAVmDx2l1TDHe3tmnOAImqzOVseZZ4fEGo Yr3md2T4/9KNtBeQLbO2nylc//UCSJoqANikhO8maIn4YIIZJM8IdlTl/GPWyQ3z v1M+siIiPcr5jffdKhf201abl0nT7ZAhV0Jd0N3iZ8cvITupfen4VsB8gXGYnHP4 dR7186+sxCPj3nhhPcVgdYR55MM6I7pASG5/Z0FsrEnH/xcvdcyzK5KoVD/A2eG6 l6oltrP+WZ3/QGd/wW0nDbHfP5e4edCtzpxIoXq8r8kf8hdnUE9E40JM36NI5xz/ QNvt/fRXB5eOXTuX3xm8eJ44oyDo6U361oMe0jARwg7ULHeDfbQQ7gfLFsE5ad4p Zeebhm5k//CeoeuPKFrrskAODQS4bjMuCvJX0QoHne1zaQ9K4TfGaivZJTUBSrGX WqDzpACNcuFDOQJcEZ9r9NvD1z0PY9wwTEYyH1vn5B+N7E0hZypz9gpBZgn4yNNF FWYRb467wkuWSWCfIHFjfSp9+SSw9NFx1DVR+SwOk4foMXcZNlQhfXghSZYJhV9t lDOva0gmrhYO8RKru81AweMN6ZfaiWdw6xt5UUw/WUjZn6sDnNJwdX7hPCg+4d0e NI2H44r2vOcS0gAL4IjV =DDj5 -----END PGP SIGNATURE----- Merge tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc Pull ARM SoC fixes from Kevin Hilman: "A collection of ARM SoC fixes for v3.14-rc1. Mostly a collection of Kconfig, device tree data and compilation fixes along with fix to drivers/phy that fixes a boot regression on some Marvell mvebu platforms" * tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: dma: mv_xor: Silence a bunch of LPAE-related warnings ARM: ux500: disable msp2 device tree node ARM: zynq: Reserve not DMAable space in front of the kernel ARM: multi_v7_defconfig: Select CONFIG_SOC_DRA7XX ARM: imx6: Initialize low-power mode early again ARM: pxa: fix various compilation problems ARM: pxa: fix compilation problem on AM300EPD board ARM: at91: add Atmel's SAMA5D3 Xplained board spi/atmel: document clock properties mmc: atmel-mci: document clock properties ARM: at91: enable USB host on at91sam9n12ek board ARM: at91/dt: fix sama5d3 ohci hclk clock reference ARM: at91/dt: sam9263: fix compatibility string for the I2C ata: sata_mv: Fix probe failures with optional phys drivers: phy: Add support for optional phys drivers: phy: Make NULL a valid phy reference ARM: fix HAVE_ARM_TWD selection for OMAP and shmobile ARM: moxart: move DMA_OF selection to driver ARM: hisi: fix kconfig warning on HAVE_ARM_TWD
This commit is contained in:
commit
83660b734b
39 changed files with 407 additions and 32 deletions
|
@ -13,6 +13,9 @@ Required properties:
|
||||||
- #address-cells: should be one. The cell is the slot id.
|
- #address-cells: should be one. The cell is the slot id.
|
||||||
- #size-cells: should be zero.
|
- #size-cells: should be zero.
|
||||||
- at least one slot node
|
- at least one slot node
|
||||||
|
- clock-names: tuple listing input clock names.
|
||||||
|
Required elements: "mci_clk"
|
||||||
|
- clocks: phandles to input clocks.
|
||||||
|
|
||||||
The node contains child nodes for each slot that the platform uses
|
The node contains child nodes for each slot that the platform uses
|
||||||
|
|
||||||
|
@ -24,6 +27,8 @@ mmc0: mmc@f0008000 {
|
||||||
interrupts = <12 4>;
|
interrupts = <12 4>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
clock-names = "mci_clk";
|
||||||
|
clocks = <&mci0_clk>;
|
||||||
|
|
||||||
[ child node definitions...]
|
[ child node definitions...]
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,6 +5,9 @@ Required properties:
|
||||||
- reg: Address and length of the register set for the device
|
- reg: Address and length of the register set for the device
|
||||||
- interrupts: Should contain spi interrupt
|
- interrupts: Should contain spi interrupt
|
||||||
- cs-gpios: chipselects
|
- cs-gpios: chipselects
|
||||||
|
- clock-names: tuple listing input clock names.
|
||||||
|
Required elements: "spi_clk"
|
||||||
|
- clocks: phandles to input clocks.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
@ -14,6 +17,8 @@ spi1: spi@fffcc000 {
|
||||||
interrupts = <13 4 5>;
|
interrupts = <13 4 5>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
clocks = <&spi1_clk>;
|
||||||
|
clock-names = "spi_clk";
|
||||||
cs-gpios = <&pioB 3 0>;
|
cs-gpios = <&pioB 3 0>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
|
|
@ -75,14 +75,26 @@ Before the controller can make use of the PHY, it has to get a reference to
|
||||||
it. This framework provides the following APIs to get a reference to the PHY.
|
it. This framework provides the following APIs to get a reference to the PHY.
|
||||||
|
|
||||||
struct phy *phy_get(struct device *dev, const char *string);
|
struct phy *phy_get(struct device *dev, const char *string);
|
||||||
|
struct phy *phy_optional_get(struct device *dev, const char *string);
|
||||||
struct phy *devm_phy_get(struct device *dev, const char *string);
|
struct phy *devm_phy_get(struct device *dev, const char *string);
|
||||||
|
struct phy *devm_phy_optional_get(struct device *dev, const char *string);
|
||||||
|
|
||||||
phy_get and devm_phy_get can be used to get the PHY. In the case of dt boot,
|
phy_get, phy_optional_get, devm_phy_get and devm_phy_optional_get can
|
||||||
the string arguments should contain the phy name as given in the dt data and
|
be used to get the PHY. In the case of dt boot, the string arguments
|
||||||
in the case of non-dt boot, it should contain the label of the PHY.
|
should contain the phy name as given in the dt data and in the case of
|
||||||
The only difference between the two APIs is that devm_phy_get associates the
|
non-dt boot, it should contain the label of the PHY. The two
|
||||||
device with the PHY using devres on successful PHY get. On driver detach,
|
devm_phy_get associates the device with the PHY using devres on
|
||||||
release function is invoked on the the devres data and devres data is freed.
|
successful PHY get. On driver detach, release function is invoked on
|
||||||
|
the the devres data and devres data is freed. phy_optional_get and
|
||||||
|
devm_phy_optional_get should be used when the phy is optional. These
|
||||||
|
two functions will never return -ENODEV, but instead returns NULL when
|
||||||
|
the phy cannot be found.
|
||||||
|
|
||||||
|
It should be noted that NULL is a valid phy reference. All phy
|
||||||
|
consumer calls on the NULL phy become NOPs. That is the release calls,
|
||||||
|
the phy_init() and phy_exit() calls, and phy_power_on() and
|
||||||
|
phy_power_off() calls are all NOP when applied to a NULL phy. The NULL
|
||||||
|
phy is useful in devices for handling optional phy devices.
|
||||||
|
|
||||||
5. Releasing a reference to the PHY
|
5. Releasing a reference to the PHY
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ dtb-$(CONFIG_ARCH_AT91) += at91sam9g35ek.dtb
|
||||||
dtb-$(CONFIG_ARCH_AT91) += at91sam9x25ek.dtb
|
dtb-$(CONFIG_ARCH_AT91) += at91sam9x25ek.dtb
|
||||||
dtb-$(CONFIG_ARCH_AT91) += at91sam9x35ek.dtb
|
dtb-$(CONFIG_ARCH_AT91) += at91sam9x35ek.dtb
|
||||||
# sama5d3
|
# sama5d3
|
||||||
|
dtb-$(CONFIG_ARCH_AT91) += at91-sama5d3_xplained.dtb
|
||||||
dtb-$(CONFIG_ARCH_AT91) += sama5d31ek.dtb
|
dtb-$(CONFIG_ARCH_AT91) += sama5d31ek.dtb
|
||||||
dtb-$(CONFIG_ARCH_AT91) += sama5d33ek.dtb
|
dtb-$(CONFIG_ARCH_AT91) += sama5d33ek.dtb
|
||||||
dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb
|
dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb
|
||||||
|
|
229
arch/arm/boot/dts/at91-sama5d3_xplained.dts
Normal file
229
arch/arm/boot/dts/at91-sama5d3_xplained.dts
Normal file
|
@ -0,0 +1,229 @@
|
||||||
|
/*
|
||||||
|
* at91-sama5d3_xplained.dts - Device Tree file for the SAMA5D3 Xplained board
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 Atmel,
|
||||||
|
* 2014 Nicolas Ferre <nicolas.ferre@atmel.com>
|
||||||
|
*
|
||||||
|
* Licensed under GPLv2 or later.
|
||||||
|
*/
|
||||||
|
/dts-v1/;
|
||||||
|
#include "sama5d36.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "SAMA5D3 Xplained";
|
||||||
|
compatible = "atmel,sama5d3-xplained", "atmel,sama5d3", "atmel,sama5";
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
bootargs = "console=ttyS0,115200";
|
||||||
|
};
|
||||||
|
|
||||||
|
memory {
|
||||||
|
reg = <0x20000000 0x10000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ahb {
|
||||||
|
apb {
|
||||||
|
mmc0: mmc@f0000000 {
|
||||||
|
pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_dat4_7 &pinctrl_mmc0_cd>;
|
||||||
|
status = "okay";
|
||||||
|
slot@0 {
|
||||||
|
reg = <0>;
|
||||||
|
bus-width = <8>;
|
||||||
|
cd-gpios = <&pioE 0 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
spi0: spi@f0004000 {
|
||||||
|
cs-gpios = <&pioD 13 0>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
can0: can@f000c000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c0: i2c@f0014000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c1: i2c@f0018000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
macb0: ethernet@f0028000 {
|
||||||
|
phy-mode = "rgmii";
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
usart0: serial@f001c000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
usart1: serial@f0020000 {
|
||||||
|
pinctrl-0 = <&pinctrl_usart1 &pinctrl_usart1_rts_cts>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
uart0: serial@f0024000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
mmc1: mmc@f8000000 {
|
||||||
|
pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3 &pinctrl_mmc1_cd>;
|
||||||
|
status = "okay";
|
||||||
|
slot@0 {
|
||||||
|
reg = <0>;
|
||||||
|
bus-width = <4>;
|
||||||
|
cd-gpios = <&pioE 1 GPIO_ACTIVE_HIGH>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
spi1: spi@f8008000 {
|
||||||
|
cs-gpios = <&pioC 25 0>, <0>, <0>, <&pioD 16 0>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
adc0: adc@f8018000 {
|
||||||
|
pinctrl-0 = <
|
||||||
|
&pinctrl_adc0_adtrg
|
||||||
|
&pinctrl_adc0_ad0
|
||||||
|
&pinctrl_adc0_ad1
|
||||||
|
&pinctrl_adc0_ad2
|
||||||
|
&pinctrl_adc0_ad3
|
||||||
|
&pinctrl_adc0_ad4
|
||||||
|
&pinctrl_adc0_ad5
|
||||||
|
&pinctrl_adc0_ad6
|
||||||
|
&pinctrl_adc0_ad7
|
||||||
|
&pinctrl_adc0_ad8
|
||||||
|
&pinctrl_adc0_ad9
|
||||||
|
>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c2: i2c@f801c000 {
|
||||||
|
dmas = <0>, <0>; /* Do not use DMA for i2c2 */
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
macb1: ethernet@f802c000 {
|
||||||
|
phy-mode = "rmii";
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
dbgu: serial@ffffee00 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl@fffff200 {
|
||||||
|
board {
|
||||||
|
pinctrl_mmc0_cd: mmc0_cd {
|
||||||
|
atmel,pins =
|
||||||
|
<AT91_PIOE 0 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_mmc1_cd: mmc1_cd {
|
||||||
|
atmel,pins =
|
||||||
|
<AT91_PIOE 1 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_usba_vbus: usba_vbus {
|
||||||
|
atmel,pins =
|
||||||
|
<AT91_PIOE 9 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>; /* PE9, conflicts with A9 */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pmc: pmc@fffffc00 {
|
||||||
|
main: mainck {
|
||||||
|
clock-frequency = <12000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nand0: nand@60000000 {
|
||||||
|
nand-bus-width = <8>;
|
||||||
|
nand-ecc-mode = "hw";
|
||||||
|
atmel,has-pmecc;
|
||||||
|
atmel,pmecc-cap = <4>;
|
||||||
|
atmel,pmecc-sector-size = <512>;
|
||||||
|
nand-on-flash-bbt;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
at91bootstrap@0 {
|
||||||
|
label = "at91bootstrap";
|
||||||
|
reg = <0x0 0x40000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
bootloader@40000 {
|
||||||
|
label = "bootloader";
|
||||||
|
reg = <0x40000 0x80000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
bootloaderenv@c0000 {
|
||||||
|
label = "bootloader env";
|
||||||
|
reg = <0xc0000 0xc0000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
dtb@180000 {
|
||||||
|
label = "device tree";
|
||||||
|
reg = <0x180000 0x80000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel@200000 {
|
||||||
|
label = "kernel";
|
||||||
|
reg = <0x200000 0x600000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
rootfs@800000 {
|
||||||
|
label = "rootfs";
|
||||||
|
reg = <0x800000 0x0f800000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
usb0: gadget@00500000 {
|
||||||
|
atmel,vbus-gpio = <&pioE 9 GPIO_ACTIVE_HIGH>; /* PE9, conflicts with A9 */
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_usba_vbus>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
usb1: ohci@00600000 {
|
||||||
|
num-ports = <3>;
|
||||||
|
atmel,vbus-gpio = <0
|
||||||
|
&pioE 3 GPIO_ACTIVE_LOW
|
||||||
|
&pioE 4 GPIO_ACTIVE_LOW
|
||||||
|
>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
usb2: ehci@00700000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
gpio_keys {
|
||||||
|
compatible = "gpio-keys";
|
||||||
|
|
||||||
|
bp3 {
|
||||||
|
label = "PB_USER";
|
||||||
|
gpios = <&pioE 29 GPIO_ACTIVE_LOW>;
|
||||||
|
linux,code = <0x104>;
|
||||||
|
gpio-key,wakeup;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
leds {
|
||||||
|
compatible = "gpio-leds";
|
||||||
|
|
||||||
|
d2 {
|
||||||
|
label = "d2";
|
||||||
|
gpios = <&pioE 23 GPIO_ACTIVE_LOW>; /* PE23, conflicts with A23, CTS2 */
|
||||||
|
linux,default-trigger = "heartbeat";
|
||||||
|
};
|
||||||
|
|
||||||
|
d3 {
|
||||||
|
label = "d3";
|
||||||
|
gpios = <&pioE 24 GPIO_ACTIVE_HIGH>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -523,7 +523,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c0: i2c@fff88000 {
|
i2c0: i2c@fff88000 {
|
||||||
compatible = "atmel,at91sam9263-i2c";
|
compatible = "atmel,at91sam9260-i2c";
|
||||||
reg = <0xfff88000 0x100>;
|
reg = <0xfff88000 0x100>;
|
||||||
interrupts = <13 IRQ_TYPE_LEVEL_HIGH 6>;
|
interrupts = <13 IRQ_TYPE_LEVEL_HIGH 6>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
|
|
@ -124,6 +124,10 @@
|
||||||
nand-on-flash-bbt;
|
nand-on-flash-bbt;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
usb0: ohci@00500000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
leds {
|
leds {
|
||||||
|
|
|
@ -1228,7 +1228,7 @@
|
||||||
compatible = "atmel,at91rm9200-ohci", "usb-ohci";
|
compatible = "atmel,at91rm9200-ohci", "usb-ohci";
|
||||||
reg = <0x00600000 0x100000>;
|
reg = <0x00600000 0x100000>;
|
||||||
interrupts = <32 IRQ_TYPE_LEVEL_HIGH 2>;
|
interrupts = <32 IRQ_TYPE_LEVEL_HIGH 2>;
|
||||||
clocks = <&usb>, <&uhphs_clk>, <&udphs_clk>,
|
clocks = <&usb>, <&uhphs_clk>, <&uhphs_clk>,
|
||||||
<&uhpck>;
|
<&uhpck>;
|
||||||
clock-names = "usb_clk", "ohci_clk", "hclk", "uhpck";
|
clock-names = "usb_clk", "ohci_clk", "hclk", "uhpck";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
|
@ -188,7 +188,6 @@
|
||||||
msp2: msp@80117000 {
|
msp2: msp@80117000 {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&msp2_default_mode>;
|
pinctrl-0 = <&msp2_default_mode>;
|
||||||
status = "okay";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
msp3: msp@80125000 {
|
msp3: msp@80125000 {
|
||||||
|
|
|
@ -29,6 +29,7 @@ CONFIG_ARCH_OMAP3=y
|
||||||
CONFIG_ARCH_OMAP4=y
|
CONFIG_ARCH_OMAP4=y
|
||||||
CONFIG_SOC_OMAP5=y
|
CONFIG_SOC_OMAP5=y
|
||||||
CONFIG_SOC_AM33XX=y
|
CONFIG_SOC_AM33XX=y
|
||||||
|
CONFIG_SOC_DRA7XX=y
|
||||||
CONFIG_SOC_AM43XX=y
|
CONFIG_SOC_AM43XX=y
|
||||||
CONFIG_ARCH_ROCKCHIP=y
|
CONFIG_ARCH_ROCKCHIP=y
|
||||||
CONFIG_ARCH_SOCFPGA=y
|
CONFIG_ARCH_SOCFPGA=y
|
||||||
|
|
|
@ -8,7 +8,7 @@ config ARCH_HI3xxx
|
||||||
select CLKSRC_OF
|
select CLKSRC_OF
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select HAVE_ARM_SCU
|
select HAVE_ARM_SCU
|
||||||
select HAVE_ARM_TWD
|
select HAVE_ARM_TWD if SMP
|
||||||
select HAVE_SMP
|
select HAVE_SMP
|
||||||
select PINCTRL
|
select PINCTRL
|
||||||
select PINCTRL_SINGLE
|
select PINCTRL_SINGLE
|
||||||
|
|
|
@ -482,6 +482,9 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
|
||||||
if (IS_ENABLED(CONFIG_PCI_IMX6))
|
if (IS_ENABLED(CONFIG_PCI_IMX6))
|
||||||
clk_set_parent(clk[lvds1_sel], clk[sata_ref]);
|
clk_set_parent(clk[lvds1_sel], clk[sata_ref]);
|
||||||
|
|
||||||
|
/* Set initial power mode */
|
||||||
|
imx6q_set_lpm(WAIT_CLOCKED);
|
||||||
|
|
||||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt");
|
np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt");
|
||||||
base = of_iomap(np, 0);
|
base = of_iomap(np, 0);
|
||||||
WARN_ON(!base);
|
WARN_ON(!base);
|
||||||
|
|
|
@ -266,6 +266,9 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)
|
||||||
/* Audio-related clocks configuration */
|
/* Audio-related clocks configuration */
|
||||||
clk_set_parent(clks[IMX6SL_CLK_SPDIF0_SEL], clks[IMX6SL_CLK_PLL3_PFD3]);
|
clk_set_parent(clks[IMX6SL_CLK_SPDIF0_SEL], clks[IMX6SL_CLK_PLL3_PFD3]);
|
||||||
|
|
||||||
|
/* Set initial power mode */
|
||||||
|
imx6q_set_lpm(WAIT_CLOCKED);
|
||||||
|
|
||||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx6sl-gpt");
|
np = of_find_compatible_node(NULL, NULL, "fsl,imx6sl-gpt");
|
||||||
base = of_iomap(np, 0);
|
base = of_iomap(np, 0);
|
||||||
WARN_ON(!base);
|
WARN_ON(!base);
|
||||||
|
|
|
@ -236,8 +236,6 @@ void __init imx6q_pm_init(void)
|
||||||
regmap_update_bits(gpr, IOMUXC_GPR1, IMX6Q_GPR1_GINT,
|
regmap_update_bits(gpr, IOMUXC_GPR1, IMX6Q_GPR1_GINT,
|
||||||
IMX6Q_GPR1_GINT);
|
IMX6Q_GPR1_GINT);
|
||||||
|
|
||||||
/* Set initial power mode */
|
|
||||||
imx6q_set_lpm(WAIT_CLOCKED);
|
|
||||||
|
|
||||||
suspend_set_ops(&imx6q_pm_ops);
|
suspend_set_ops(&imx6q_pm_ops);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@ config ARCH_MOXART
|
||||||
bool "MOXA ART SoC" if ARCH_MULTI_V4T
|
bool "MOXA ART SoC" if ARCH_MULTI_V4T
|
||||||
select CPU_FA526
|
select CPU_FA526
|
||||||
select ARM_DMA_MEM_BUFFERABLE
|
select ARM_DMA_MEM_BUFFERABLE
|
||||||
select DMA_OF
|
|
||||||
select USE_OF
|
select USE_OF
|
||||||
select CLKSRC_OF
|
select CLKSRC_OF
|
||||||
select CLKSRC_MMIO
|
select CLKSRC_MMIO
|
||||||
|
|
|
@ -54,7 +54,7 @@ config SOC_OMAP5
|
||||||
select ARM_GIC
|
select ARM_GIC
|
||||||
select CPU_V7
|
select CPU_V7
|
||||||
select HAVE_ARM_SCU if SMP
|
select HAVE_ARM_SCU if SMP
|
||||||
select HAVE_ARM_TWD if LOCAL_TIMERS
|
select HAVE_ARM_TWD if SMP
|
||||||
select HAVE_SMP
|
select HAVE_SMP
|
||||||
select HAVE_ARM_ARCH_TIMER
|
select HAVE_ARM_ARCH_TIMER
|
||||||
select ARM_ERRATA_798181 if SMP
|
select ARM_ERRATA_798181 if SMP
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
#include <mach/gumstix.h>
|
#include <mach/gumstix.h>
|
||||||
#include <mach/mfp-pxa25x.h>
|
#include <mach/mfp-pxa25x.h>
|
||||||
|
#include <mach/irqs.h>
|
||||||
#include <linux/platform_data/video-pxafb.h>
|
#include <linux/platform_data/video-pxafb.h>
|
||||||
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#ifndef ASM_ARCH_BALLOON3_H
|
#ifndef ASM_ARCH_BALLOON3_H
|
||||||
#define ASM_ARCH_BALLOON3_H
|
#define ASM_ARCH_BALLOON3_H
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_NR_BUILTIN_GPIO */
|
||||||
|
|
||||||
enum balloon3_features {
|
enum balloon3_features {
|
||||||
BALLOON3_FEATURE_OHCI,
|
BALLOON3_FEATURE_OHCI,
|
||||||
BALLOON3_FEATURE_MMC,
|
BALLOON3_FEATURE_MMC,
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#ifndef __ASM_ARCH_CORGI_H
|
#ifndef __ASM_ARCH_CORGI_H
|
||||||
#define __ASM_ARCH_CORGI_H 1
|
#define __ASM_ARCH_CORGI_H 1
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_NR_BUILTIN_GPIO */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Corgi (Non Standard) GPIO Definitions
|
* Corgi (Non Standard) GPIO Definitions
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
#ifndef CSB726_H
|
#ifndef CSB726_H
|
||||||
#define CSB726_H
|
#define CSB726_H
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
|
||||||
|
|
||||||
#define CSB726_GPIO_IRQ_LAN 52
|
#define CSB726_GPIO_IRQ_LAN 52
|
||||||
#define CSB726_GPIO_IRQ_SM501 53
|
#define CSB726_GPIO_IRQ_SM501 53
|
||||||
#define CSB726_GPIO_MMC_DETECT 100
|
#define CSB726_GPIO_MMC_DETECT 100
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
|
||||||
|
|
||||||
/* BTRESET - Reset line to Bluetooth module, active low signal. */
|
/* BTRESET - Reset line to Bluetooth module, active low signal. */
|
||||||
#define GPIO_GUMSTIX_BTRESET 7
|
#define GPIO_GUMSTIX_BTRESET 7
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
* IDP hardware.
|
* IDP hardware.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
|
||||||
|
|
||||||
#define IDP_FLASH_PHYS (PXA_CS0_PHYS)
|
#define IDP_FLASH_PHYS (PXA_CS0_PHYS)
|
||||||
#define IDP_ALT_FLASH_PHYS (PXA_CS1_PHYS)
|
#define IDP_ALT_FLASH_PHYS (PXA_CS1_PHYS)
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
#ifndef _INCLUDE_PALMLD_H_
|
#ifndef _INCLUDE_PALMLD_H_
|
||||||
#define _INCLUDE_PALMLD_H_
|
#define _INCLUDE_PALMLD_H_
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
|
||||||
|
|
||||||
/** HERE ARE GPIOs **/
|
/** HERE ARE GPIOs **/
|
||||||
|
|
||||||
/* GPIOs */
|
/* GPIOs */
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
#ifndef _INCLUDE_PALMT5_H_
|
#ifndef _INCLUDE_PALMT5_H_
|
||||||
#define _INCLUDE_PALMT5_H_
|
#define _INCLUDE_PALMT5_H_
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
|
||||||
|
|
||||||
/** HERE ARE GPIOs **/
|
/** HERE ARE GPIOs **/
|
||||||
|
|
||||||
/* GPIOs */
|
/* GPIOs */
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
#ifndef _INCLUDE_PALMTC_H_
|
#ifndef _INCLUDE_PALMTC_H_
|
||||||
#define _INCLUDE_PALMTC_H_
|
#define _INCLUDE_PALMTC_H_
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
|
||||||
|
|
||||||
/** HERE ARE GPIOs **/
|
/** HERE ARE GPIOs **/
|
||||||
|
|
||||||
/* GPIOs */
|
/* GPIOs */
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
#ifndef _INCLUDE_PALMTX_H_
|
#ifndef _INCLUDE_PALMTX_H_
|
||||||
#define _INCLUDE_PALMTX_H_
|
#define _INCLUDE_PALMTX_H_
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
|
||||||
|
|
||||||
/** HERE ARE GPIOs **/
|
/** HERE ARE GPIOs **/
|
||||||
|
|
||||||
/* GPIOs */
|
/* GPIOs */
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
* Definitions of CPU card resources only
|
* Definitions of CPU card resources only
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
|
||||||
|
|
||||||
/* phyCORE-PXA270 (PCM027) Interrupts */
|
/* phyCORE-PXA270 (PCM027) Interrupts */
|
||||||
#define PCM027_IRQ(x) (IRQ_BOARD_START + (x))
|
#define PCM027_IRQ(x) (IRQ_BOARD_START + (x))
|
||||||
#define PCM027_BTDET_IRQ PCM027_IRQ(0)
|
#define PCM027_BTDET_IRQ PCM027_IRQ(0)
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mach/pcm027.h>
|
#include <mach/pcm027.h>
|
||||||
|
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* definitions relevant only when the PCM-990
|
* definitions relevant only when the PCM-990
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
#ifndef __ASM_ARCH_POODLE_H
|
#ifndef __ASM_ARCH_POODLE_H
|
||||||
#define __ASM_ARCH_POODLE_H 1
|
#define __ASM_ARCH_POODLE_H 1
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GPIOs
|
* GPIOs
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
#define __ASM_ARCH_SPITZ_H 1
|
#define __ASM_ARCH_SPITZ_H 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_NR_BUILTIN_GPIO, PXA_GPIO_TO_IRQ */
|
||||||
#include <linux/fb.h>
|
#include <linux/fb.h>
|
||||||
#include <linux/gpio.h>
|
|
||||||
|
|
||||||
/* Spitz/Akita GPIOs */
|
/* Spitz/Akita GPIOs */
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
#ifndef _ASM_ARCH_TOSA_H_
|
#ifndef _ASM_ARCH_TOSA_H_
|
||||||
#define _ASM_ARCH_TOSA_H_ 1
|
#define _ASM_ARCH_TOSA_H_ 1
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_NR_BUILTIN_GPIO */
|
||||||
|
|
||||||
/* TOSA Chip selects */
|
/* TOSA Chip selects */
|
||||||
#define TOSA_LCDC_PHYS PXA_CS4_PHYS
|
#define TOSA_LCDC_PHYS PXA_CS4_PHYS
|
||||||
/* Internel Scoop */
|
/* Internel Scoop */
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
#ifndef _TRIPEPS4_H_
|
#ifndef _TRIPEPS4_H_
|
||||||
#define _TRIPEPS4_H_
|
#define _TRIPEPS4_H_
|
||||||
|
|
||||||
|
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
|
||||||
|
|
||||||
/* physical memory regions */
|
/* physical memory regions */
|
||||||
#define TRIZEPS4_FLASH_PHYS (PXA_CS0_PHYS) /* Flash region */
|
#define TRIZEPS4_FLASH_PHYS (PXA_CS0_PHYS) /* Flash region */
|
||||||
#define TRIZEPS4_DISK_PHYS (PXA_CS1_PHYS) /* Disk On Chip region */
|
#define TRIZEPS4_DISK_PHYS (PXA_CS1_PHYS) /* Disk On Chip region */
|
||||||
|
|
|
@ -8,7 +8,7 @@ config ARCH_SHMOBILE_MULTI
|
||||||
select CPU_V7
|
select CPU_V7
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select HAVE_ARM_SCU if SMP
|
select HAVE_ARM_SCU if SMP
|
||||||
select HAVE_ARM_TWD if LOCAL_TIMERS
|
select HAVE_ARM_TWD if SMP
|
||||||
select HAVE_SMP
|
select HAVE_SMP
|
||||||
select ARM_GIC
|
select ARM_GIC
|
||||||
select MIGHT_HAVE_CACHE_L2X0
|
select MIGHT_HAVE_CACHE_L2X0
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <linux/of_irq.h>
|
#include <linux/of_irq.h>
|
||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
|
#include <linux/memblock.h>
|
||||||
#include <linux/irqchip.h>
|
#include <linux/irqchip.h>
|
||||||
#include <linux/irqchip/arm-gic.h>
|
#include <linux/irqchip/arm-gic.h>
|
||||||
|
|
||||||
|
@ -41,6 +42,18 @@
|
||||||
|
|
||||||
void __iomem *zynq_scu_base;
|
void __iomem *zynq_scu_base;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* zynq_memory_init - Initialize special memory
|
||||||
|
*
|
||||||
|
* We need to stop things allocating the low memory as DMA can't work in
|
||||||
|
* the 1st 512K of memory.
|
||||||
|
*/
|
||||||
|
static void __init zynq_memory_init(void)
|
||||||
|
{
|
||||||
|
if (!__pa(PAGE_OFFSET))
|
||||||
|
memblock_reserve(__pa(PAGE_OFFSET), __pa(swapper_pg_dir));
|
||||||
|
}
|
||||||
|
|
||||||
static struct platform_device zynq_cpuidle_device = {
|
static struct platform_device zynq_cpuidle_device = {
|
||||||
.name = "cpuidle-zynq",
|
.name = "cpuidle-zynq",
|
||||||
};
|
};
|
||||||
|
@ -117,5 +130,6 @@ DT_MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform")
|
||||||
.init_machine = zynq_init_machine,
|
.init_machine = zynq_init_machine,
|
||||||
.init_time = zynq_timer_init,
|
.init_time = zynq_timer_init,
|
||||||
.dt_compat = zynq_dt_match,
|
.dt_compat = zynq_dt_match,
|
||||||
|
.reserve = zynq_memory_init,
|
||||||
.restart = zynq_system_reset,
|
.restart = zynq_system_reset,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
|
|
@ -4126,12 +4126,14 @@ static int mv_platform_probe(struct platform_device *pdev)
|
||||||
clk_prepare_enable(hpriv->port_clks[port]);
|
clk_prepare_enable(hpriv->port_clks[port]);
|
||||||
|
|
||||||
sprintf(port_number, "port%d", port);
|
sprintf(port_number, "port%d", port);
|
||||||
hpriv->port_phys[port] = devm_phy_get(&pdev->dev, port_number);
|
hpriv->port_phys[port] = devm_phy_optional_get(&pdev->dev,
|
||||||
|
port_number);
|
||||||
if (IS_ERR(hpriv->port_phys[port])) {
|
if (IS_ERR(hpriv->port_phys[port])) {
|
||||||
rc = PTR_ERR(hpriv->port_phys[port]);
|
rc = PTR_ERR(hpriv->port_phys[port]);
|
||||||
hpriv->port_phys[port] = NULL;
|
hpriv->port_phys[port] = NULL;
|
||||||
if ((rc != -EPROBE_DEFER) && (rc != -ENODEV))
|
if (rc != -EPROBE_DEFER)
|
||||||
dev_warn(&pdev->dev, "error getting phy");
|
dev_warn(&pdev->dev, "error getting phy %d",
|
||||||
|
rc);
|
||||||
goto err;
|
goto err;
|
||||||
} else
|
} else
|
||||||
phy_power_on(hpriv->port_phys[port]);
|
phy_power_on(hpriv->port_phys[port]);
|
||||||
|
|
|
@ -346,6 +346,7 @@ config MOXART_DMA
|
||||||
tristate "MOXART DMA support"
|
tristate "MOXART DMA support"
|
||||||
depends on ARCH_MOXART
|
depends on ARCH_MOXART
|
||||||
select DMA_ENGINE
|
select DMA_ENGINE
|
||||||
|
select DMA_OF
|
||||||
select DMA_VIRTUAL_CHANNELS
|
select DMA_VIRTUAL_CHANNELS
|
||||||
help
|
help
|
||||||
Enable support for the MOXA ART SoC DMA controller.
|
Enable support for the MOXA ART SoC DMA controller.
|
||||||
|
|
|
@ -497,8 +497,8 @@ mv_xor_tx_submit(struct dma_async_tx_descriptor *tx)
|
||||||
if (!mv_can_chain(grp_start))
|
if (!mv_can_chain(grp_start))
|
||||||
goto submit_done;
|
goto submit_done;
|
||||||
|
|
||||||
dev_dbg(mv_chan_to_devp(mv_chan), "Append to last desc %x\n",
|
dev_dbg(mv_chan_to_devp(mv_chan), "Append to last desc %pa\n",
|
||||||
old_chain_tail->async_tx.phys);
|
&old_chain_tail->async_tx.phys);
|
||||||
|
|
||||||
/* fix up the hardware chain */
|
/* fix up the hardware chain */
|
||||||
mv_desc_set_next_desc(old_chain_tail, grp_start->async_tx.phys);
|
mv_desc_set_next_desc(old_chain_tail, grp_start->async_tx.phys);
|
||||||
|
@ -527,7 +527,8 @@ submit_done:
|
||||||
/* returns the number of allocated descriptors */
|
/* returns the number of allocated descriptors */
|
||||||
static int mv_xor_alloc_chan_resources(struct dma_chan *chan)
|
static int mv_xor_alloc_chan_resources(struct dma_chan *chan)
|
||||||
{
|
{
|
||||||
char *hw_desc;
|
void *virt_desc;
|
||||||
|
dma_addr_t dma_desc;
|
||||||
int idx;
|
int idx;
|
||||||
struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan);
|
struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan);
|
||||||
struct mv_xor_desc_slot *slot = NULL;
|
struct mv_xor_desc_slot *slot = NULL;
|
||||||
|
@ -542,17 +543,16 @@ static int mv_xor_alloc_chan_resources(struct dma_chan *chan)
|
||||||
" %d descriptor slots", idx);
|
" %d descriptor slots", idx);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
hw_desc = (char *) mv_chan->dma_desc_pool_virt;
|
virt_desc = mv_chan->dma_desc_pool_virt;
|
||||||
slot->hw_desc = (void *) &hw_desc[idx * MV_XOR_SLOT_SIZE];
|
slot->hw_desc = virt_desc + idx * MV_XOR_SLOT_SIZE;
|
||||||
|
|
||||||
dma_async_tx_descriptor_init(&slot->async_tx, chan);
|
dma_async_tx_descriptor_init(&slot->async_tx, chan);
|
||||||
slot->async_tx.tx_submit = mv_xor_tx_submit;
|
slot->async_tx.tx_submit = mv_xor_tx_submit;
|
||||||
INIT_LIST_HEAD(&slot->chain_node);
|
INIT_LIST_HEAD(&slot->chain_node);
|
||||||
INIT_LIST_HEAD(&slot->slot_node);
|
INIT_LIST_HEAD(&slot->slot_node);
|
||||||
INIT_LIST_HEAD(&slot->tx_list);
|
INIT_LIST_HEAD(&slot->tx_list);
|
||||||
hw_desc = (char *) mv_chan->dma_desc_pool;
|
dma_desc = mv_chan->dma_desc_pool;
|
||||||
slot->async_tx.phys =
|
slot->async_tx.phys = dma_desc + idx * MV_XOR_SLOT_SIZE;
|
||||||
(dma_addr_t) &hw_desc[idx * MV_XOR_SLOT_SIZE];
|
|
||||||
slot->idx = idx++;
|
slot->idx = idx++;
|
||||||
|
|
||||||
spin_lock_bh(&mv_chan->lock);
|
spin_lock_bh(&mv_chan->lock);
|
||||||
|
@ -582,8 +582,8 @@ mv_xor_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
|
||||||
int slot_cnt;
|
int slot_cnt;
|
||||||
|
|
||||||
dev_dbg(mv_chan_to_devp(mv_chan),
|
dev_dbg(mv_chan_to_devp(mv_chan),
|
||||||
"%s dest: %x src %x len: %u flags: %ld\n",
|
"%s dest: %pad src %pad len: %u flags: %ld\n",
|
||||||
__func__, dest, src, len, flags);
|
__func__, &dest, &src, len, flags);
|
||||||
if (unlikely(len < MV_XOR_MIN_BYTE_COUNT))
|
if (unlikely(len < MV_XOR_MIN_BYTE_COUNT))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -626,8 +626,8 @@ mv_xor_prep_dma_xor(struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src,
|
||||||
BUG_ON(len > MV_XOR_MAX_BYTE_COUNT);
|
BUG_ON(len > MV_XOR_MAX_BYTE_COUNT);
|
||||||
|
|
||||||
dev_dbg(mv_chan_to_devp(mv_chan),
|
dev_dbg(mv_chan_to_devp(mv_chan),
|
||||||
"%s src_cnt: %d len: dest %x %u flags: %ld\n",
|
"%s src_cnt: %d len: %u dest %pad flags: %ld\n",
|
||||||
__func__, src_cnt, len, dest, flags);
|
__func__, src_cnt, len, &dest, flags);
|
||||||
|
|
||||||
spin_lock_bh(&mv_chan->lock);
|
spin_lock_bh(&mv_chan->lock);
|
||||||
slot_cnt = mv_chan_xor_slot_count(len, src_cnt);
|
slot_cnt = mv_chan_xor_slot_count(len, src_cnt);
|
||||||
|
|
|
@ -162,6 +162,9 @@ int phy_init(struct phy *phy)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (!phy)
|
||||||
|
return 0;
|
||||||
|
|
||||||
ret = phy_pm_runtime_get_sync(phy);
|
ret = phy_pm_runtime_get_sync(phy);
|
||||||
if (ret < 0 && ret != -ENOTSUPP)
|
if (ret < 0 && ret != -ENOTSUPP)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -187,6 +190,9 @@ int phy_exit(struct phy *phy)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (!phy)
|
||||||
|
return 0;
|
||||||
|
|
||||||
ret = phy_pm_runtime_get_sync(phy);
|
ret = phy_pm_runtime_get_sync(phy);
|
||||||
if (ret < 0 && ret != -ENOTSUPP)
|
if (ret < 0 && ret != -ENOTSUPP)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -212,6 +218,9 @@ int phy_power_on(struct phy *phy)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (!phy)
|
||||||
|
return 0;
|
||||||
|
|
||||||
ret = phy_pm_runtime_get_sync(phy);
|
ret = phy_pm_runtime_get_sync(phy);
|
||||||
if (ret < 0 && ret != -ENOTSUPP)
|
if (ret < 0 && ret != -ENOTSUPP)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -240,6 +249,9 @@ int phy_power_off(struct phy *phy)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (!phy)
|
||||||
|
return 0;
|
||||||
|
|
||||||
mutex_lock(&phy->mutex);
|
mutex_lock(&phy->mutex);
|
||||||
if (phy->power_count == 1 && phy->ops->power_off) {
|
if (phy->power_count == 1 && phy->ops->power_off) {
|
||||||
ret = phy->ops->power_off(phy);
|
ret = phy->ops->power_off(phy);
|
||||||
|
@ -308,7 +320,7 @@ err0:
|
||||||
*/
|
*/
|
||||||
void phy_put(struct phy *phy)
|
void phy_put(struct phy *phy)
|
||||||
{
|
{
|
||||||
if (IS_ERR(phy))
|
if (!phy || IS_ERR(phy))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
module_put(phy->ops->owner);
|
module_put(phy->ops->owner);
|
||||||
|
@ -328,6 +340,9 @@ void devm_phy_put(struct device *dev, struct phy *phy)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
if (!phy)
|
||||||
|
return;
|
||||||
|
|
||||||
r = devres_destroy(dev, devm_phy_release, devm_phy_match, phy);
|
r = devres_destroy(dev, devm_phy_release, devm_phy_match, phy);
|
||||||
dev_WARN_ONCE(dev, r, "couldn't find PHY resource\n");
|
dev_WARN_ONCE(dev, r, "couldn't find PHY resource\n");
|
||||||
}
|
}
|
||||||
|
@ -410,6 +425,27 @@ struct phy *phy_get(struct device *dev, const char *string)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(phy_get);
|
EXPORT_SYMBOL_GPL(phy_get);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* phy_optional_get() - lookup and obtain a reference to an optional phy.
|
||||||
|
* @dev: device that requests this phy
|
||||||
|
* @string: the phy name as given in the dt data or the name of the controller
|
||||||
|
* port for non-dt case
|
||||||
|
*
|
||||||
|
* Returns the phy driver, after getting a refcount to it; or
|
||||||
|
* NULL if there is no such phy. The caller is responsible for
|
||||||
|
* calling phy_put() to release that count.
|
||||||
|
*/
|
||||||
|
struct phy *phy_optional_get(struct device *dev, const char *string)
|
||||||
|
{
|
||||||
|
struct phy *phy = phy_get(dev, string);
|
||||||
|
|
||||||
|
if (PTR_ERR(phy) == -ENODEV)
|
||||||
|
phy = NULL;
|
||||||
|
|
||||||
|
return phy;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(phy_optional_get);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* devm_phy_get() - lookup and obtain a reference to a phy.
|
* devm_phy_get() - lookup and obtain a reference to a phy.
|
||||||
* @dev: device that requests this phy
|
* @dev: device that requests this phy
|
||||||
|
@ -440,6 +476,30 @@ struct phy *devm_phy_get(struct device *dev, const char *string)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(devm_phy_get);
|
EXPORT_SYMBOL_GPL(devm_phy_get);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* devm_phy_optional_get() - lookup and obtain a reference to an optional phy.
|
||||||
|
* @dev: device that requests this phy
|
||||||
|
* @string: the phy name as given in the dt data or phy device name
|
||||||
|
* for non-dt case
|
||||||
|
*
|
||||||
|
* Gets the phy using phy_get(), and associates a device with it using
|
||||||
|
* devres. On driver detach, release function is invoked on the devres
|
||||||
|
* data, then, devres data is freed. This differs to devm_phy_get() in
|
||||||
|
* that if the phy does not exist, it is not considered an error and
|
||||||
|
* -ENODEV will not be returned. Instead the NULL phy is returned,
|
||||||
|
* which can be passed to all other phy consumer calls.
|
||||||
|
*/
|
||||||
|
struct phy *devm_phy_optional_get(struct device *dev, const char *string)
|
||||||
|
{
|
||||||
|
struct phy *phy = devm_phy_get(dev, string);
|
||||||
|
|
||||||
|
if (PTR_ERR(phy) == -ENODEV)
|
||||||
|
phy = NULL;
|
||||||
|
|
||||||
|
return phy;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(devm_phy_optional_get);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* phy_create() - create a new phy
|
* phy_create() - create a new phy
|
||||||
* @dev: device that is creating the new phy
|
* @dev: device that is creating the new phy
|
||||||
|
|
|
@ -146,7 +146,9 @@ static inline void phy_set_bus_width(struct phy *phy, int bus_width)
|
||||||
phy->attrs.bus_width = bus_width;
|
phy->attrs.bus_width = bus_width;
|
||||||
}
|
}
|
||||||
struct phy *phy_get(struct device *dev, const char *string);
|
struct phy *phy_get(struct device *dev, const char *string);
|
||||||
|
struct phy *phy_optional_get(struct device *dev, const char *string);
|
||||||
struct phy *devm_phy_get(struct device *dev, const char *string);
|
struct phy *devm_phy_get(struct device *dev, const char *string);
|
||||||
|
struct phy *devm_phy_optional_get(struct device *dev, const char *string);
|
||||||
void phy_put(struct phy *phy);
|
void phy_put(struct phy *phy);
|
||||||
void devm_phy_put(struct device *dev, struct phy *phy);
|
void devm_phy_put(struct device *dev, struct phy *phy);
|
||||||
struct phy *of_phy_simple_xlate(struct device *dev,
|
struct phy *of_phy_simple_xlate(struct device *dev,
|
||||||
|
@ -232,11 +234,23 @@ static inline struct phy *phy_get(struct device *dev, const char *string)
|
||||||
return ERR_PTR(-ENOSYS);
|
return ERR_PTR(-ENOSYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline struct phy *phy_optional_get(struct device *dev,
|
||||||
|
const char *string)
|
||||||
|
{
|
||||||
|
return ERR_PTR(-ENOSYS);
|
||||||
|
}
|
||||||
|
|
||||||
static inline struct phy *devm_phy_get(struct device *dev, const char *string)
|
static inline struct phy *devm_phy_get(struct device *dev, const char *string)
|
||||||
{
|
{
|
||||||
return ERR_PTR(-ENOSYS);
|
return ERR_PTR(-ENOSYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline struct phy *devm_phy_optional_get(struct device *dev,
|
||||||
|
const char *string)
|
||||||
|
{
|
||||||
|
return ERR_PTR(-ENOSYS);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void phy_put(struct phy *phy)
|
static inline void phy_put(struct phy *phy)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue