Signed-off-by: Tim Harvey <tharvey@gateworks.com> SVN-Revision: 37363master
parent
6ef9d30da7
commit
af6eb6cc8c
@ -0,0 +1,429 @@ |
||||
/* |
||||
* Copyright 2013 Gateworks Corporation |
||||
* |
||||
* The code contained herein is licensed under the GNU General Public |
||||
* License. You may obtain a copy of the GNU General Public License |
||||
* Version 2 or later at the following locations: |
||||
* |
||||
* http://www.opensource.org/licenses/gpl-license.html |
||||
* http://www.gnu.org/copyleft/gpl.html |
||||
*/ |
||||
|
||||
/dts-v1/; |
||||
#include "imx6q-ventana.dtsi" |
||||
|
||||
/ { |
||||
model = "Gateworks Ventana GW5400-A"; |
||||
compatible = "gw,imx6q-gw5400-a", "gw,ventana", "fsl,imx6q"; |
||||
|
||||
aliases { |
||||
ethernet0 = &fec; |
||||
ethernet1 = ð1; |
||||
sky2 = ð1; |
||||
}; |
||||
|
||||
/* SDRAM addressing */ |
||||
memory { |
||||
reg = <0x10000000 0x40000000>; |
||||
}; |
||||
|
||||
chosen { |
||||
bootargs = "console=ttymxc1,115200"; |
||||
}; |
||||
|
||||
leds { |
||||
compatible = "gpio-leds"; |
||||
|
||||
led0: user0 { |
||||
label = "user0"; |
||||
gpios = <&gpio4 6 0>; /* 102 -> MX6_PANLEDG# */ |
||||
linux,default-trigger = "heartbeat"; |
||||
}; |
||||
|
||||
led1: user1 { |
||||
label = "user1"; |
||||
gpios = <&gpio4 10 0>; /* 106 -> MX6_PANLEDR# */ |
||||
}; |
||||
|
||||
led2: user2 { |
||||
label = "user2"; |
||||
gpios = <&gpio4 15 0>; /* 111 -> MX6_LOCLEDR# */ |
||||
}; |
||||
}; |
||||
|
||||
regulators { |
||||
compatible = "simple-bus"; |
||||
|
||||
reg_2p5v: 2p5v { |
||||
compatible = "regulator-fixed"; |
||||
regulator-name = "2P5V"; |
||||
regulator-min-microvolt = <2500000>; |
||||
regulator-max-microvolt = <2500000>; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
reg_3p3v: 3p3v { |
||||
compatible = "regulator-fixed"; |
||||
regulator-name = "3P3V"; |
||||
regulator-min-microvolt = <3300000>; |
||||
regulator-max-microvolt = <3300000>; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
reg_usb_otg_vbus: usb_otg_vbus { |
||||
compatible = "regulator-fixed"; |
||||
regulator-name = "usb_otg_vbus"; |
||||
regulator-min-microvolt = <5000000>; |
||||
regulator-max-microvolt = <5000000>; |
||||
gpio = <&gpio3 22 0>; |
||||
enable-active-high; |
||||
}; |
||||
}; |
||||
|
||||
sound { |
||||
compatible = "fsl,imx6q-sabrelite-sgtl5000", |
||||
"fsl,imx-audio-sgtl5000"; |
||||
model = "imx6q-sabrelite-sgtl5000"; |
||||
ssi-controller = <&ssi1>; |
||||
audio-codec = <&codec>; |
||||
audio-routing = |
||||
"MIC_IN", "Mic Jack", |
||||
"Mic Jack", "Mic Bias", |
||||
"Headphone Jack", "HP_OUT"; |
||||
mux-int-port = <1>; |
||||
mux-ext-port = <4>; |
||||
}; |
||||
}; |
||||
|
||||
&iomuxc { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_hog>; |
||||
|
||||
hog { |
||||
pinctrl_hog: hoggrp { |
||||
fsl,pins = < |
||||
/* USB OTG Power Enable */ |
||||
MX6Q_PAD_EIM_D22__GPIO3_IO22 0x80000000 |
||||
|
||||
/* 3:19 SPINOR_CS0# */ |
||||
MX6Q_PAD_EIM_D19__GPIO3_IO19 0x80000000 |
||||
|
||||
/* 1:09 MX6_DIO0 (could also be PWM1_PWM0) */ |
||||
MX6Q_PAD_GPIO_9__GPIO1_IO09 0x80000000 |
||||
/* 1:19 MX6_DIO1 (could also be PWM2_PWM0) */ |
||||
MX6Q_PAD_SD1_DAT2__GPIO1_IO19 0x80000000 |
||||
/* 2:09 MX6_DIO2 (could also be PWM3_PWM0) */ |
||||
MX6Q_PAD_SD4_DAT1__GPIO2_IO09 0x80000000 |
||||
/* 2:10 MX6_DIO3 (could also be PWM3_PWM0) */ |
||||
MX6Q_PAD_SD4_DAT2__GPIO2_IO10 0x80000000 |
||||
|
||||
/* 1:16 USBHUB_RST# */ |
||||
MX6Q_PAD_SD1_DAT0__GPIO1_IO16 0x80000000 |
||||
|
||||
/* PCIE IRQ */ |
||||
MX6Q_PAD_ENET_TX_EN__GPIO1_IO28 0x80000000 |
||||
/* PCIE RST */ |
||||
MX6Q_PAD_ENET_TXD1__GPIO1_IO29 0x08000000 |
||||
|
||||
/* 1:12 MIPI_DIO */ |
||||
MX6Q_PAD_SD1_DAT3__GPIO1_IO21 0x80000000 |
||||
|
||||
/* AUD4_MCK */ |
||||
MX6Q_PAD_GPIO_0__CCM_CLKO1 0x80000000 |
||||
>; |
||||
}; |
||||
}; |
||||
|
||||
#if 0 |
||||
/* ipu1: IPU1_CSI0: HDMI reciver (Digital Video In) */ |
||||
ipu1 { |
||||
pinctrl_ipu1_1: ipu1grp-5 { |
||||
fsl,pins = < |
||||
MX6Q_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC |
||||
MX6Q_PAD_CSI0_DATA_EN__IPU1_CSI0_DATA_EN |
||||
MX6Q_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK |
||||
MX6Q_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC |
||||
MX6Q_PAD_CSI0_DAT4__IPU1_CSI0_DATA04 |
||||
MX6Q_PAD_CSI0_DAT5__IPU1_CSI0_DATA05 |
||||
MX6Q_PAD_CSI0_DAT6__IPU1_CSI0_DATA06 |
||||
MX6Q_PAD_CSI0_DAT7__IPU1_CSI0_DATA07 |
||||
MX6Q_PAD_CSI0_DAT8__IPU1_CSI0_DATA08 |
||||
MX6Q_PAD_CSI0_DAT9__IPU1_CSI0_DATA09 |
||||
MX6Q_PAD_CSI0_DAT10__IPU1_CSI0_DATA10 |
||||
MX6Q_PAD_CSI0_DAT11__IPU1_CSI0_DATA11 |
||||
MX6Q_PAD_CSI0_DAT12__IPU1_CSI0_DATA12 |
||||
MX6Q_PAD_CSI0_DAT13__IPU1_CSI0_DATA13 |
||||
MX6Q_PAD_CSI0_DAT14__IPU1_CSI0_DATA14 |
||||
MX6Q_PAD_CSI0_DAT15__IPU1_CSI0_DATA15 |
||||
MX6Q_PAD_CSI0_DAT16__IPU1_CSI0_DATA16 |
||||
MX6Q_PAD_CSI0_DAT17__IPU1_CSI0_DATA17 |
||||
MX6Q_PAD_CSI0_DAT18__IPU1_CSI0_DATA18 |
||||
MX6Q_PAD_CSI0_DAT19__IPU1_CSI0_DATA19 |
||||
>; |
||||
}; |
||||
}; |
||||
|
||||
/* ipu2: IPU1_CSI1: Analog Video Decoder (Analog Video In) */ |
||||
/* IPU2_CSI1: Analog Video Decoder (Analog Video In) */ |
||||
ipu2 { |
||||
pinctrl_ipu2_1: ipu2grp-1 { |
||||
fsl,pins = < |
||||
MX6Q_PAD_EIM_A17__IPU2_CSI1_DATA12 |
||||
MX6Q_PAD_EIM_D27__IPU2_CSI1_DATA13 |
||||
MX6Q_PAD_EIM_D26__IPU2_CSI1_DATA14 |
||||
MX6Q_PAD_EIM_D20__IPU2_CSI1_DATA15 |
||||
MX6Q_PAD_EIM_D19__IPU2_CSI1_DATA16 |
||||
MX6Q_PAD_EIM_D18__IPU2_CSI1_DATA17 |
||||
MX6Q_PAD_EIM_D16__IPU2_CSI1_DATA18 |
||||
MX6Q_PAD_EIM_EB2__IPU2_CSI1_DATA19 |
||||
|
||||
MX6Q_PAD_EIM_D29__IPU2_CSI1_VSYNC |
||||
MX6Q_PAD_EIM_EB3__IPU2_CSI1_HSYNC |
||||
// not sure why this causes kernel to crash in early init |
||||
// MX6Q_PAD_EIM_A16__IPU2_CSI1_PIXCLK |
||||
>; |
||||
}; |
||||
}; |
||||
|
||||
/* ipu3: IPU2_DISP0: Analog Video Encoder (Analog Video Out) */ |
||||
ipu3 { |
||||
pinctrl_ipu3_1: ipu3grp-5 { |
||||
fsl,pins = < |
||||
MX6Q_PAD_DISP0_DAT0__IPU2_DISP0_DATA00 |
||||
MX6Q_PAD_DISP0_DAT1__IPU2_DISP0_DATA01 |
||||
MX6Q_PAD_DISP0_DAT2__IPU2_DISP0_DATA02 |
||||
MX6Q_PAD_DISP0_DAT3__IPU2_DISP0_DATA03 |
||||
MX6Q_PAD_DISP0_DAT4__IPU2_DISP0_DATA04 |
||||
MX6Q_PAD_DISP0_DAT5__IPU2_DISP0_DATA05 |
||||
MX6Q_PAD_DISP0_DAT6__IPU2_DISP0_DATA06 |
||||
MX6Q_PAD_DISP0_DAT7__IPU2_DISP0_DATA07 |
||||
MX6Q_PAD_DISP0_DAT8__IPU2_DISP0_DATA08 |
||||
MX6Q_PAD_DISP0_DAT9__IPU2_DISP0_DATA09 |
||||
MX6Q_PAD_DISP0_DAT10__IPU2_DISP0_DATA10 |
||||
MX6Q_PAD_DISP0_DAT11__IPU2_DISP0_DATA11 |
||||
MX6Q_PAD_DISP0_DAT12__IPU2_DISP0_DATA12 |
||||
MX6Q_PAD_DISP0_DAT13__IPU2_DISP0_DATA13 |
||||
MX6Q_PAD_DISP0_DAT14__IPU2_DISP0_DATA14 |
||||
MX6Q_PAD_DISP0_DAT15__IPU2_DISP0_DATA15 |
||||
>; |
||||
}; |
||||
}; |
||||
#endif |
||||
}; |
||||
|
||||
&ecspi1 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_ecspi1_1>; |
||||
status = "okay"; |
||||
|
||||
flash: m25p80@0 { |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
compatible = "sst,w25q256"; |
||||
spi-max-frequency = <30000000>; |
||||
reg = <0>; |
||||
}; |
||||
}; |
||||
|
||||
&uart1 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_uart1_2>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&uart2 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_uart2_2>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&uart3 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_uart3_1>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&uart5 { |
||||
status = "okay"; |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_uart5_1>; |
||||
}; |
||||
|
||||
&ssi1 { |
||||
fsl,mode = "i2s-slave"; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&ssi2 { |
||||
fsl,mode = "i2s-slave"; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&can1 { |
||||
reg = <0x02090000 0x4000>; |
||||
interrupts = <0 110 0x04>; |
||||
//clock-frequency |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&usbh1 { |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&pcie { |
||||
rst-gpios = <&gpio1 29 0>; /* PCIESWT_RST# */ |
||||
clken-gpios = <&gpio1 20 0>; /* not used */ |
||||
status = "okay"; |
||||
|
||||
eth1: sky2@8 { /* MAC/PHY on bus 8 */ |
||||
compatible = "marvell,sky2"; |
||||
/* Filled in by U-Boot */ |
||||
mac-address = [ 00 00 00 00 00 00 ]; |
||||
}; |
||||
}; |
||||
|
||||
&fec { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_enet_1>; |
||||
phy-mode = "rgmii"; |
||||
phy-reset-gpios = <&gpio1 30 0>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&usdhc3 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_usdhc3_2>; |
||||
cd-gpios = <&gpio7 0 0>; |
||||
vmmc-supply = <®_3p3v>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&audmux { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_audmux_3>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&i2c1 { |
||||
status = "okay"; |
||||
clock-frequency = <100000>; |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_i2c1_1>; |
||||
|
||||
eeprom: eeprom@50 { |
||||
compatible = "atmel,24c02"; |
||||
reg = <0x50>; |
||||
pagesize = <16>; |
||||
}; |
||||
|
||||
eeprom1: eeprom@50 { |
||||
compatible = "atmel,24c02"; |
||||
reg = <0x50>; |
||||
pagesize = <16>; |
||||
}; |
||||
|
||||
eeprom2: eeprom@51 { |
||||
compatible = "atmel,24c02"; |
||||
reg = <0x51>; |
||||
pagesize = <16>; |
||||
}; |
||||
|
||||
eeprom3: eeprom@52 { |
||||
compatible = "atmel,24c02"; |
||||
reg = <0x52>; |
||||
pagesize = <16>; |
||||
}; |
||||
|
||||
eeprom4: eeprom@53 { |
||||
compatible = "atmel,24c02"; |
||||
reg = <0x53>; |
||||
pagesize = <16>; |
||||
}; |
||||
|
||||
rtc: ds1672@68 { |
||||
compatible = "dallas,ds1672"; |
||||
reg = <0x68>; |
||||
}; |
||||
|
||||
gpio: pca9555@23 { |
||||
compatible = "nxp,pca9555"; |
||||
reg = <0x23>; |
||||
gpio-controller; |
||||
#gpio-cells = <2>; |
||||
}; |
||||
|
||||
hwmon: gsc@29 { |
||||
compatible = "gw,gsp"; |
||||
reg = <0x29>; |
||||
}; |
||||
}; |
||||
|
||||
&i2c2 { |
||||
status = "okay"; |
||||
clock-frequency = <100000>; |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_i2c2_2>; |
||||
|
||||
pmic: pfuze@08 { |
||||
compatible = "fsl,pfuze100"; |
||||
reg = <0x0a>; |
||||
}; |
||||
|
||||
pciswitch: pex8609@3f { |
||||
compatible = "plx,pex8609"; |
||||
reg = <0x3f>; |
||||
}; |
||||
|
||||
pciclkgen: si52147@6b { |
||||
compatible = "sil,si52147"; |
||||
reg = <0x6b>; |
||||
}; |
||||
}; |
||||
|
||||
&i2c3 { |
||||
status = "okay"; |
||||
clock-frequency = <100000>; |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_i2c3_2>; |
||||
|
||||
codec: sgtl5000@0a { |
||||
compatible = "fsl,sgtl5000"; |
||||
reg = <0x0a>; |
||||
clocks = <&clks 169>; |
||||
VDDA-supply = <®_2p5v>; |
||||
VDDIO-supply = <®_3p3v>; |
||||
}; |
||||
|
||||
accelerometer: mma8450@1c { |
||||
compatible = "fsl,mma8450"; |
||||
reg = <0x1c>; |
||||
}; |
||||
|
||||
videoout: adv7393@2a { |
||||
compatible = "adi,adv7393"; |
||||
reg = <0x2a>; |
||||
}; |
||||
|
||||
videoin: adv7180@20 { |
||||
compatible = "adi,adv7180"; |
||||
reg = <0x20>; |
||||
}; |
||||
|
||||
hdmiin: adv7611@4c { |
||||
compatible = "adi,adv7611"; |
||||
reg = <0x4c>; |
||||
}; |
||||
|
||||
touchscreen: egalax_ts@04 { |
||||
compatible = "eeti,egalax_ts"; |
||||
reg = <0x04>; |
||||
wakeup-gpios = <&gpio1 12 0>; |
||||
}; |
||||
}; |
||||
|
||||
&ldb { |
||||
status = "okay"; |
||||
lvds-channel@0 { |
||||
crtcs = <&ipu1 0>, <&ipu1 1>, <&ipu2 0>, <&ipu2 1>; |
||||
}; |
||||
}; |
@ -0,0 +1,51 @@ |
||||
/* |
||||
* Copyright 2013 Gateworks Corporation |
||||
* |
||||
* The code contained herein is licensed under the GNU General Public |
||||
* License. You may obtain a copy of the GNU General Public License |
||||
* Version 2 or later at the following locations: |
||||
* |
||||
* http://www.opensource.org/licenses/gpl-license.html |
||||
* http://www.gnu.org/copyleft/gpl.html |
||||
*/ |
||||
|
||||
#include "imx6q.dtsi" |
||||
|
||||
/ { |
||||
model = "Gateworks Ventana"; |
||||
system-serial = ""; |
||||
|
||||
// these are used by bootloader for disabling nodes |
||||
aliases { |
||||
// ethernet0 = ð0; |
||||
// ethernet1 = ð1; |
||||
ssi0 = &ssi1; |
||||
ssi1 = &ssi2; |
||||
ipu0 = &ipu1; |
||||
ipu1 = &ipu2; |
||||
// mipi_csi = &mipi_csi; |
||||
// mipi_dsi = &mipi_dsi; |
||||
usdhc0 = &usdhc1; |
||||
usdhc1 = &usdhc2; |
||||
usdhc2 = &usdhc3; |
||||
usdhc3 = &usdhc4; |
||||
i2c0 = &i2c1; |
||||
i2c1 = &i2c2; |
||||
i2c2 = &i2c3; |
||||
usb0 = &usbh3; |
||||
usb1 = &usbotg; |
||||
spi0 = &ecspi1; |
||||
spi1 = &ecspi2; |
||||
spi2 = &ecspi3; |
||||
spi3 = &ecspi4; |
||||
spi4 = &ecspi5; |
||||
pwm0 = &pwm1; |
||||
pwm1 = &pwm2; |
||||
pwm2 = &pwm3; |
||||
pwm3 = &pwm4; |
||||
can0 = &can1; |
||||
led0 = &led0; |
||||
led1 = &led1; |
||||
led2 = &led2; |
||||
}; |
||||
}; |
@ -0,0 +1,156 @@ |
||||
/*
|
||||
* arch/arm/mach-mx6/msi.c |
||||
* |
||||
* PCI MSI support for the imx processor |
||||
* |
||||
* Copyright (c) 2013, Boundary Devices. |
||||
* |
||||
* This program is free software; you can redistribute it and/or modify it |
||||
* under the terms and conditions of the GNU General Public License, |
||||
* version 2, as published by the Free Software Foundation. |
||||
* |
||||
* This program is distributed in the hope it will be useful, but WITHOUT |
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
||||
* more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License along with |
||||
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple |
||||
* Place - Suite 330, Boston, MA 02111-1307 USA. |
||||
* |
||||
*/ |
||||
#include <linux/module.h> |
||||
#include <linux/pci.h> |
||||
#include <linux/msi.h> |
||||
#include <asm/bitops.h> |
||||
#include <asm/mach/irq.h> |
||||
#include <asm/irq.h> |
||||
#include <linux/irqchip/chained_irq.h> |
||||
|
||||
#include "hardware.h" |
||||
#include "msi.h" |
||||
|
||||
#define IMX_NUM_MSI_IRQS 128 |
||||
static DECLARE_BITMAP(msi_irq_in_use, IMX_NUM_MSI_IRQS); |
||||
static int irq_base; |
||||
|
||||
static void imx_msi_handler(unsigned int irq, struct irq_desc *desc) |
||||
{ |
||||
int i, j; |
||||
unsigned status; |
||||
struct irq_chip *chip = irq_get_chip(irq); |
||||
|
||||
irq_base = irq_alloc_descs(-1, 0, IMX_NUM_MSI_IRQS, 0); |
||||
if (irq_base < 0) { |
||||
printk(KERN_ERR "%s: could not allocate IRQ numbers\n", __func__); |
||||
return; |
||||
} |
||||
|
||||
chained_irq_enter(chip, desc); |
||||
for (i = 0; i < 8; i++) { |
||||
status = imx_pcie_msi_pending(i); |
||||
while (status) { |
||||
j = __fls(status); |
||||
generic_handle_irq(irq_base + j); |
||||
status &= ~(1 << j); |
||||
} |
||||
irq_base += 32; |
||||
} |
||||
chained_irq_exit(chip, desc); |
||||
} |
||||
|
||||
/*
|
||||
* Dynamic irq allocate and deallocation |
||||
*/ |
||||
int create_irq(void) |
||||
{ |
||||
int irq, pos; |
||||
|
||||
do { |
||||
pos = find_first_zero_bit(msi_irq_in_use, IMX_NUM_MSI_IRQS); |
||||
if ((unsigned)pos >= IMX_NUM_MSI_IRQS) |
||||
return -ENOSPC; |
||||
/* test_and_set_bit operates on 32-bits at a time */ |
||||
} while (test_and_set_bit(pos, msi_irq_in_use)); |
||||
|
||||
irq = irq_base + pos; |
||||
dynamic_irq_init(irq); |
||||
return irq; |
||||
} |
||||
|
||||
void destroy_irq(unsigned int irq) |
||||
{ |
||||
int pos = irq - irq_base; |
||||
|
||||
dynamic_irq_cleanup(irq); |
||||
clear_bit(pos, msi_irq_in_use); |
||||
} |
||||
|
||||
void arch_teardown_msi_irq(unsigned int irq) |
||||
{ |
||||
destroy_irq(irq); |
||||
} |
||||
|
||||
static void imx_msi_irq_ack(struct irq_data *d) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
static void imx_msi_irq_enable(struct irq_data *d) |
||||
{ |
||||
imx_pcie_enable_irq(d->irq - irq_base, 1); |
||||
return unmask_msi_irq(d); |
||||
} |
||||
|
||||
static void imx_msi_irq_disable(struct irq_data *d) |
||||
{ |
||||
imx_pcie_enable_irq(d->irq - irq_base, 0); |
||||
return mask_msi_irq(d); |
||||
} |
||||
|
||||
static void imx_msi_irq_mask(struct irq_data *d) |
||||
{ |
||||
imx_pcie_mask_irq(d->irq - irq_base, 1); |
||||
return mask_msi_irq(d); |
||||
} |
||||
|
||||
static void imx_msi_irq_unmask(struct irq_data *d) |
||||
{ |
||||
imx_pcie_mask_irq(d->irq - irq_base, 0); |
||||
return unmask_msi_irq(d); |
||||
} |
||||
|
||||
static struct irq_chip imx_msi_chip = { |
||||
.name = "PCIe-MSI", |
||||
.irq_ack = imx_msi_irq_ack, |
||||
.irq_enable = imx_msi_irq_enable, |
||||
.irq_disable = imx_msi_irq_disable, |
||||
.irq_mask = imx_msi_irq_mask, |
||||
.irq_unmask = imx_msi_irq_unmask, |
||||
}; |
||||
|
||||
int arch_setup_msi_irq(struct pci_dev *pdev, struct msi_desc *desc) |
||||
{ |
||||
int irq = create_irq(); |
||||
struct msi_msg msg; |
||||
|
||||
if (irq < 0) |
||||
return irq; |
||||
|
||||
irq_set_msi_desc(irq, desc); |
||||
|
||||
msg.address_hi = 0x0; |
||||
msg.address_lo = MSI_MATCH_ADDR; |
||||
msg.data = (mxc_cpu_type << 15) | ((irq - irq_base) & 0xff); |
||||
|
||||
write_msi_msg(irq, &msg); |
||||
irq_set_chip_and_handler(irq, &imx_msi_chip, handle_simple_irq); |
||||
set_irq_flags(irq, IRQF_VALID); |
||||
pr_info("%s: %d of %d\n", __func__, irq, NR_IRQS); |
||||
return 0; |
||||
} |
||||
|
||||
void imx_msi_init(void) |
||||
{ |
||||
irq_set_chained_handler(MXC_INT_PCIE_0, imx_msi_handler); |
||||
} |
@ -0,0 +1,29 @@ |
||||
/*
|
||||
* Copyright (C) 2013 Boundary Devices, Inc. All Rights Reserved. |
||||
* |
||||
* This program is free software; you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation; either version 2 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License along |
||||
* with this program; if not, write to the Free Software Foundation, Inc., |
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
*/ |
||||
|
||||
void imx_pcie_enable_irq(unsigned pos, int set); |
||||
void imx_pcie_mask_irq(unsigned pos, int set); |
||||
unsigned imx_pcie_msi_pending(unsigned index); |
||||
|
||||
#define MSI_MATCH_ADDR 0x10000050 |
||||
#define MXC_INT_PCIE_0 152 |
||||
#define MXC_INT_PCIE_1 153 |
||||
#define MXC_INT_PCIE_2 154 |
||||
#define MXC_INT_PCIE_3 155 |
||||
|
||||
void imx_msi_init(void); |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,116 @@ |
||||
:1000000053444D4101000000010000001C000000AD |
||||
:1000100026000000B40000007A0600008202000002 |
||||
:10002000FFFFFFFF00000000FFFFFFFFFFFFFFFFDC |
||||
:10003000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 |
||||
:10004000FFFFFFFFFFFFFFFF6A1A0000FFFFFFFF38 |
||||
:10005000EB020000BB180000FFFFFFFF08040000D8 |
||||
:10006000FFFFFFFFC0030000FFFFFFFFFFFFFFFFD9 |
||||
:10007000FFFFFFFFAB020000FFFFFFFF7B0300005D |
||||
:10008000FFFFFFFFFFFFFFFF4C0400006E040000B6 |
||||
:10009000FFFFFFFF00180000FFFFFFFFFFFFFFFF54 |
||||
:1000A000000000000018000062180000161A00008E |
||||
:1000B000061B0000E3C1DB57E35FE357F352016A1D |
||||
:1000C0008F00D500017D8D00A005EB5D7804037DD8 |
||||
:1000D00079042C7D367C79041F7CEE56000F600677 |
||||
:1000E000057D0965437E0A62417E20980A623E7E54 |
||||
:1000F00009653C7E12051205AD026007037DFB55C4 |
||||
:10010000D36D2B98FB55041DD36DC86A2F7F011F3B |
||||
:1001100003200048E47C5398FB55D76D1500057803 |
||||
:100120000962C86A0962C86AD76D5298FB55D76DD3 |
||||
:100130001500150005780A62C86A0A62C86AD76D98 |
||||
:100140005298FB55D76D15001500150005780B6208 |
||||
:10015000C86A0B62C86AD76D097CDF6D077F000033 |
||||
:10016000EB55004D077DFAC1E35706980700CC68B0 |
||||
:100170000C6813C20AC20398D9C1E3C1DB57E35F1D |
||||
:10018000E357F352216A8F00D500017D8D00A00551 |
||||
:10019000EB5DFB567804037D79042A7D317C79047C |
||||
:1001A000207C700B1103EB53000F6003057D096584 |
||||
:1001B000377E0A62357E86980A62327E0965307E15 |
||||
:1001C00012051205AD026007027C065A8E98265A67 |
||||
:1001D000277F011F03200048E87C700B1103135395 |
||||
:1001E000AF98150004780962065A0962265AAE983B |
||||
:1001F0001500150004780A62065A0A62265AAE985B |
||||
:1002000015001500150004780B62065A0B62265A79 |
||||
:10021000077C0000EB55004D067DFAC1E357699855 |
||||
:1002200007000C6813C20AC26698700B11031353BF |
||||
:100230006C07017CD9C1FB5E8A066B07017CD9C1C2 |
||||
:10024000F35EDB59D3588F0110010F398B003CC18D |
||||
:100250002B7DC05AC85B4EC1277C88038906E35CAE |
||||
:10026000FF0D1105FF1DBC053E07004D187D7008F0 |
||||
:1002700011007E07097D7D07027D2852E698F8521D |
||||
:10028000DB54BC02CC02097C7C07027D2852EF982B |
||||
:10029000F852D354BC02CC02097D0004DD988B00D7 |
||||
:1002A000C052C85359C1D67D0002CD98FF08BF0087 |
||||
:1002B0007F07157D8804D500017D8D00A005EB5DCD |
||||
:1002C0008F0212021202FF3ADA05027C3E071899E9 |
||||
:1002D000A402DD02027D3E0718995E071899EB55CE |
||||
:1002E0009805EB5DF352FB546A07267D6C07017D90 |
||||
:1002F00055996B07577C6907047D6807027D010EDD |
||||
:100300002F999358D600017D8E009355A005935DDB |
||||
:10031000A00602780255045D1D7C004E087C69072A |
||||
:10032000037D0255177E3C99045D147F8906935026 |
||||
:100330000048017D2799A099150006780255045DB3 |
||||
:100340004F070255245D2F07017CA09917006F0706 |
||||
:10035000017C012093559D000700A7D9F598D36C27 |
||||
:100360006907047D6807027D010E64999358D600E1 |
||||
:10037000017D8E009355A005935DA006027802557D |
||||
:10038000C86D0F7C004E087C6907037D0255097E0D |
||||
:100390007199C86D067F890693500048017D5C996C |
||||
:1003A000A0999A99C36A6907047D6807027D010EC6 |
||||
:1003B00087999358D600017D8E009355A005935DD3 |
||||
:1003C000A0060278C865045D0F7C004E087C6907B2 |
||||
:1003D000037DC865097E9499045D067F8906935064 |
||||
:1003E0000048017D7F99A09993559D000700FF6CFF |
||||
:1003F000A7D9F5980000E354EB55004D017CF59822 |
||||
:10040000DD98E354EB55FF0A1102FF1A7F07027CC7 |
||||
:10041000A005B4999D008C05BA05A0051002BA0488 |
||||
:10042000AD0454040600E3C1DB57FB52C36AF35228 |
||||
:10043000056A8F00D500017D8D00A005EB5D780475 |
||||
:10044000037D79042B7D1E7C7904337CEE56000FEE |
||||
:10045000FB556007027DC36DD599041DC36DC8624D |
||||
:100460003B7E6006027D10021202096A357F12028D |
||||
:10047000096A327F1202096A2F7F011F0320004898 |
||||
:10048000E77C099AFB55C76D150015001500057826 |
||||
:10049000C8620B6AC8620B6AC76D089AFB55C76DC4 |
||||
:1004A000150015000578C8620A6AC8620A6AC76D35 |
||||
:1004B000089AFB55C76D15000578C862096AC862BD |
||||
:1004C000096AC76D097C286A077F0000EB55004D5B |
||||
:1004D000057DFAC1DB57BF9977C254040AC2BA99A5 |
||||
:1004E000D9C1E3C1DB57F352056A8F00D500017D06 |
||||
:1004F0008D00A005FB567804037D7904297D1F7CBF |
||||
:1005000079042E7CE35D700D1105ED55000F600739 |
||||
:10051000027D0652329A2652337E6005027D100219 |
||||
:100520001202096A2D7F1202096A2A7F1202096AE1 |
||||
:10053000277F011F03200048EA7CE3555D9A1500E0 |
||||
:1005400015001500047806520B6A26520B6A5C9A55 |
||||
:1005500015001500047806520A6A26520A6A5C9A47 |
||||
:10056000150004780652096A2652096A097C286A2D |
||||
:10057000077F0000DB57004D057DFAC1DB571B9A52 |
||||
:1005800077C254040AC2189AE3C1DB57F352056AD2 |
||||
:10059000FB568E02941AC36AC8626902247D941EB7 |
||||
:1005A000C36ED36EC8624802C86A9426981EC36E92 |
||||
:1005B000D36EC8624C02C86A9826C36E981EC36E7A |
||||
:1005C000C8629826C36E6002097CC8626E02247DF0 |
||||
:1005D000096A1E7F0125004D257D849A286A187FAF |
||||
:1005E00004627AC2B89AE36E8F00D805017D8D004F |
||||
:1005F000A005C8626E02107D096A0A7F0120F97C9D |
||||
:10060000286A067F0000004D0D7DFAC1DB576E9A07 |
||||
:10061000070004620C6AB59A286AFA7F04627AC2FB |
||||
:1006200058045404286AF47F0AC26B9AD9C1E3C102 |
||||
:10063000DB57F352056AFB568E02941A0252690286 |
||||
:100640001D7D941E06524802065A9426981E065294 |
||||
:100650004C02065A9826981E065260020A7C98267A |
||||
:1006600006526E02237D096A1D7F0125004D247DFF |
||||
:10067000D19A286A177F04627AC2029B8F00D8053C |
||||
:10068000017D8D00A00506526E02107D096A0A7F69 |
||||
:100690000120F97C286A067F0000004D0D7DFAC11B |
||||
:1006A000DB57C19A070004620C6AFF9A286AFA7F36 |
||||
:1006B00004627AC258045404286AF47F0AC2BE9ABB |
||||
:1006C000016E0B612F7E0B622D7E0B632B7E0C0D5A |
||||
:1006D0001704170417049D04081DCC05017C0C0D9C |
||||
:1006E000D16A000F4207C86FDD6F1C7F8E009D002E |
||||
:1006F00001680B67177ED56B04080278C86F120774 |
||||
:10070000117C0B670F7E04080278C86F12070A7C01 |
||||
:10071000DD6F087FD169010FC86FDD6F037F0101B5 |
||||
:0E0720000004129B0700FF680C680002129B89 |
||||
:00000001FF |
Loading…
Reference in new issue