* [PATCH V5 0/5] x86: a bridge from PCI to AMBA
@ 2013-02-20 21:22 Alessandro Rubini
2013-02-20 21:23 ` [PATCH V5 1/5] DMA: PL330: use prefix in reg names to build under x86 Alessandro Rubini
` (5 more replies)
0 siblings, 6 replies; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 21:22 UTC (permalink / raw)
To: linux-kernel; +Cc: Giancarlo Asnaghi, Davide Ciminaghi, tglx, mingo, hpa, x86
This is a repost of patches I sent quite some time ago and are
available from the "tip" repository, as branch "x86/amba" based on
v3.7. That branch includes 7 patches but two of them are already
upstream. Some of the other 5 had minor conflicts during rebase, but
only in the initial "#include" area.
I repost as Peter Anvin suggested. The commits in the tip
repository included both hpa's signed off (which I left in)
and the reference to the previous lkml message, which I removed
as it is not current by the time this message exists.
Some acked-by we received on the mailing list are not in the patch set
because they are missing from tip::x86/amba which is authoritative.
Alessandro Rubini (5):
DMA: PL330: use prefix in reg names to build under x86
watchdog: sp805_wdt depends on ARM
mmc: Use the new <linux/sizes.h>
drivers/amba: add support for a PCI bridge
x86: add CONFIG_ARM_AMBA, selected by STA2X11
arch/x86/Kconfig | 4 ++
drivers/Kconfig | 2 +
drivers/amba/Kconfig | 10 ++++
drivers/amba/Makefile | 1 +
drivers/amba/pci-amba.c | 93 +++++++++++++++++++++++++++++++++++++
drivers/dma/pl330.c | 107 ++++++++++++++++++++++---------------------
drivers/mmc/host/mmci.c | 2 +-
drivers/mmc/host/msm_sdcc.c | 2 +-
drivers/mmc/host/mvsdio.c | 2 +-
drivers/mmc/host/mxcmmc.c | 2 +-
drivers/mmc/host/pxamci.c | 3 +-
drivers/watchdog/Kconfig | 2 +-
12 files changed, 170 insertions(+), 60 deletions(-)
create mode 100644 drivers/amba/Kconfig
create mode 100644 drivers/amba/pci-amba.c
--
1.7.7.2
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH V5 1/5] DMA: PL330: use prefix in reg names to build under x86
2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
@ 2013-02-20 21:23 ` Alessandro Rubini
2013-02-20 21:23 ` [PATCH V5 2/5] watchdog: sp805_wdt depends on ARM Alessandro Rubini
` (4 subsequent siblings)
5 siblings, 0 replies; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 21:23 UTC (permalink / raw)
To: linux-kernel
Cc: Giancarlo Asnaghi, Davide Ciminaghi, jassisinghbrar, tglx, mingo,
hpa, x86
This driver would not compile if ARM_AMBA is selected under x86,
because "CS" and "DS" are already defined there. But AMBA
is used in the x86 world by a PCI-to-AMBA bridge, to be submitted.
The patch just adds the "PL330_" prefix to all registers,
so it can be built by randomconfig after ARM_AMBA appears within x86.
No other technical changes have been performed.
The patch was build-tested only.
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
Signed-off-by: Davide Ciminaghi <ciminaghi@gnudd.com>
Acked-by: Jassi Brar <jassisinghbrar@gmail.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
@Jassi: I repost this after rebasing, on hpa's suggestion.
drivers/dma/pl330.c | 107 ++++++++++++++++++++++++++-------------------------
1 files changed, 54 insertions(+), 53 deletions(-)
diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
index 7181531..b45cbe0 100644
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -70,7 +70,7 @@ enum pl330_reqtype {
};
/* Register and Bit field Definitions */
-#define DS 0x0
+#define PL330_DS 0x0
#define DS_ST_STOP 0x0
#define DS_ST_EXEC 0x1
#define DS_ST_CMISS 0x2
@@ -84,33 +84,33 @@ enum pl330_reqtype {
#define DS_ST_FLTCMP 0xe
#define DS_ST_FAULT 0xf
-#define DPC 0x4
-#define INTEN 0x20
-#define ES 0x24
-#define INTSTATUS 0x28
-#define INTCLR 0x2c
-#define FSM 0x30
-#define FSC 0x34
-#define FTM 0x38
+#define PL330_DPC 0x4
+#define PL330_INTEN 0x20
+#define PL330_ES 0x24
+#define PL330_INTSTATUS 0x28
+#define PL330_INTCLR 0x2c
+#define PL330_FSM 0x30
+#define PL330_FSC 0x34
+#define PL330_FTM 0x38
#define _FTC 0x40
-#define FTC(n) (_FTC + (n)*0x4)
+#define PL330_FTC(n) (_FTC + (n)*0x4)
#define _CS 0x100
-#define CS(n) (_CS + (n)*0x8)
+#define PL330_CS(n) (_CS + (n)*0x8)
#define CS_CNS (1 << 21)
#define _CPC 0x104
-#define CPC(n) (_CPC + (n)*0x8)
+#define PL330_CPC(n) (_CPC + (n)*0x8)
#define _SA 0x400
-#define SA(n) (_SA + (n)*0x20)
+#define PL330_SA(n) (_SA + (n)*0x20)
#define _DA 0x404
-#define DA(n) (_DA + (n)*0x20)
+#define PL330_DA(n) (_DA + (n)*0x20)
#define _CC 0x408
-#define CC(n) (_CC + (n)*0x20)
+#define PL330_CC(n) (_CC + (n)*0x20)
#define CC_SRCINC (1 << 0)
#define CC_DSTINC (1 << 14)
@@ -131,24 +131,24 @@ enum pl330_reqtype {
#define CC_SWAP_SHFT 28
#define _LC0 0x40c
-#define LC0(n) (_LC0 + (n)*0x20)
+#define PL330_LC0(n) (_LC0 + (n)*0x20)
#define _LC1 0x410
-#define LC1(n) (_LC1 + (n)*0x20)
+#define PL330_LC1(n) (_LC1 + (n)*0x20)
-#define DBGSTATUS 0xd00
+#define PL330_DBGSTATUS 0xd00
#define DBG_BUSY (1 << 0)
-#define DBGCMD 0xd04
-#define DBGINST0 0xd08
-#define DBGINST1 0xd0c
+#define PL330_DBGCMD 0xd04
+#define PL330_DBGINST0 0xd08
+#define PL330_DBGINST1 0xd0c
-#define CR0 0xe00
-#define CR1 0xe04
-#define CR2 0xe08
-#define CR3 0xe0c
-#define CR4 0xe10
-#define CRD 0xe14
+#define PL330_CR0 0xe00
+#define PL330_CR1 0xe04
+#define PL330_CR2 0xe08
+#define PL330_CR3 0xe0c
+#define PL330_CR4 0xe10
+#define PL330_CRD 0xe14
#define PERIPH_ID 0xfe0
#define PERIPH_REV_SHIFT 20
@@ -1022,7 +1022,7 @@ static bool _until_dmac_idle(struct pl330_thread *thrd)
do {
/* Until Manager is Idle */
- if (!(readl(regs + DBGSTATUS) & DBG_BUSY))
+ if (!(readl(regs + PL330_DBGSTATUS) & DBG_BUSY))
break;
cpu_relax();
@@ -1045,10 +1045,10 @@ static inline void _execute_DBGINSN(struct pl330_thread *thrd,
val |= (1 << 0);
val |= (thrd->id << 8); /* Channel Number */
}
- writel(val, regs + DBGINST0);
+ writel(val, regs + PL330_DBGINST0);
val = *((u32 *)&insn[2]);
- writel(val, regs + DBGINST1);
+ writel(val, regs + PL330_DBGINST1);
/* If timed out due to halted state-machine */
if (_until_dmac_idle(thrd)) {
@@ -1057,7 +1057,7 @@ static inline void _execute_DBGINSN(struct pl330_thread *thrd,
}
/* Get going */
- writel(0, regs + DBGCMD);
+ writel(0, regs + PL330_DBGCMD);
}
/*
@@ -1082,9 +1082,9 @@ static inline u32 _state(struct pl330_thread *thrd)
u32 val;
if (is_manager(thrd))
- val = readl(regs + DS) & 0xf;
+ val = readl(regs + PL330_DS) & 0xf;
else
- val = readl(regs + CS(thrd->id)) & 0xf;
+ val = readl(regs + PL330_CS(thrd->id)) & 0xf;
switch (val) {
case DS_ST_STOP:
@@ -1151,7 +1151,8 @@ static void _stop(struct pl330_thread *thrd)
_emit_KILL(0, insn);
/* Stop generating interrupts for SEV */
- writel(readl(regs + INTEN) & ~(1 << thrd->ev), regs + INTEN);
+ writel(readl(regs + PL330_INTEN) & ~(1 << thrd->ev),
+ regs + PL330_INTEN);
_execute_DBGINSN(thrd, insn, is_manager(thrd));
}
@@ -1190,7 +1191,7 @@ static bool _trigger(struct pl330_thread *thrd)
if (r->cfg)
ns = r->cfg->nonsecure ? 1 : 0;
- else if (readl(regs + CS(thrd->id)) & CS_CNS)
+ else if (readl(regs + PL330_CS(thrd->id)) & CS_CNS)
ns = 1;
else
ns = 0;
@@ -1206,7 +1207,7 @@ static bool _trigger(struct pl330_thread *thrd)
_emit_GO(0, insn, &go);
/* Set to generate interrupts for SEV */
- writel(readl(regs + INTEN) | (1 << thrd->ev), regs + INTEN);
+ writel(readl(regs + PL330_INTEN) | (1 << thrd->ev), regs + PL330_INTEN);
/* Only manager can execute GO */
_execute_DBGINSN(thrd, insn, true);
@@ -1581,7 +1582,7 @@ static int pl330_submit_req(void *ch_id, struct pl330_req *r)
ccr = _prepare_ccr(r->cfg);
} else {
- ccr = readl(regs + CC(thrd->id));
+ ccr = readl(regs + PL330_CC(thrd->id));
}
/* If this req doesn't have valid xfer settings */
@@ -1658,7 +1659,7 @@ static void pl330_dotask(unsigned long data)
_stop(thrd);
- if (readl(regs + FSC) & (1 << thrd->id))
+ if (readl(regs + PL330_FSC) & (1 << thrd->id))
err = PL330_ERR_FAIL;
else
err = PL330_ERR_ABORT;
@@ -1703,13 +1704,13 @@ static int pl330_update(const struct pl330_info *pi)
spin_lock_irqsave(&pl330->lock, flags);
- val = readl(regs + FSM) & 0x1;
+ val = readl(regs + PL330_FSM) & 0x1;
if (val)
pl330->dmac_tbd.reset_mngr = true;
else
pl330->dmac_tbd.reset_mngr = false;
- val = readl(regs + FSC) & ((1 << pi->pcfg.num_chan) - 1);
+ val = readl(regs + PL330_FSC) & ((1 << pi->pcfg.num_chan) - 1);
pl330->dmac_tbd.reset_chan |= val;
if (val) {
int i = 0;
@@ -1717,8 +1718,8 @@ static int pl330_update(const struct pl330_info *pi)
if (val & (1 << i)) {
dev_info(pi->dev,
"Reset Channel-%d\t CS-%x FTC-%x\n",
- i, readl(regs + CS(i)),
- readl(regs + FTC(i)));
+ i, readl(regs + PL330_CS(i)),
+ readl(regs + PL330_FTC(i)));
_stop(&pl330->channels[i]);
}
i++;
@@ -1726,7 +1727,7 @@ static int pl330_update(const struct pl330_info *pi)
}
/* Check which event happened i.e, thread notified */
- val = readl(regs + ES);
+ val = readl(regs + PL330_ES);
if (pi->pcfg.num_events < 32
&& val & ~((1 << pi->pcfg.num_events) - 1)) {
pl330->dmac_tbd.reset_dmac = true;
@@ -1738,12 +1739,12 @@ static int pl330_update(const struct pl330_info *pi)
for (ev = 0; ev < pi->pcfg.num_events; ev++) {
if (val & (1 << ev)) { /* Event occurred */
struct pl330_thread *thrd;
- u32 inten = readl(regs + INTEN);
+ u32 inten = readl(regs + PL330_INTEN);
int active;
/* Clear the event */
if (inten & (1 << ev))
- writel(1 << ev, regs + INTCLR);
+ writel(1 << ev, regs + PL330_INTCLR);
ret = 1;
@@ -1950,41 +1951,41 @@ static void read_dmac_config(struct pl330_info *pi)
void __iomem *regs = pi->base;
u32 val;
- val = readl(regs + CRD) >> CRD_DATA_WIDTH_SHIFT;
+ val = readl(regs + PL330_CRD) >> CRD_DATA_WIDTH_SHIFT;
val &= CRD_DATA_WIDTH_MASK;
pi->pcfg.data_bus_width = 8 * (1 << val);
- val = readl(regs + CRD) >> CRD_DATA_BUFF_SHIFT;
+ val = readl(regs + PL330_CRD) >> CRD_DATA_BUFF_SHIFT;
val &= CRD_DATA_BUFF_MASK;
pi->pcfg.data_buf_dep = val + 1;
- val = readl(regs + CR0) >> CR0_NUM_CHANS_SHIFT;
+ val = readl(regs + PL330_CR0) >> CR0_NUM_CHANS_SHIFT;
val &= CR0_NUM_CHANS_MASK;
val += 1;
pi->pcfg.num_chan = val;
- val = readl(regs + CR0);
+ val = readl(regs + PL330_CR0);
if (val & CR0_PERIPH_REQ_SET) {
val = (val >> CR0_NUM_PERIPH_SHIFT) & CR0_NUM_PERIPH_MASK;
val += 1;
pi->pcfg.num_peri = val;
- pi->pcfg.peri_ns = readl(regs + CR4);
+ pi->pcfg.peri_ns = readl(regs + PL330_CR4);
} else {
pi->pcfg.num_peri = 0;
}
- val = readl(regs + CR0);
+ val = readl(regs + PL330_CR0);
if (val & CR0_BOOT_MAN_NS)
pi->pcfg.mode |= DMAC_MODE_NS;
else
pi->pcfg.mode &= ~DMAC_MODE_NS;
- val = readl(regs + CR0) >> CR0_NUM_EVENTS_SHIFT;
+ val = readl(regs + PL330_CR0) >> CR0_NUM_EVENTS_SHIFT;
val &= CR0_NUM_EVENTS_MASK;
val += 1;
pi->pcfg.num_events = val;
- pi->pcfg.irq_ns = readl(regs + CR3);
+ pi->pcfg.irq_ns = readl(regs + PL330_CR3);
pi->pcfg.periph_id = get_id(pi, PERIPH_ID);
pi->pcfg.pcell_id = get_id(pi, PCELL_ID);
--
1.7.7.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH V5 2/5] watchdog: sp805_wdt depends on ARM
2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
2013-02-20 21:23 ` [PATCH V5 1/5] DMA: PL330: use prefix in reg names to build under x86 Alessandro Rubini
@ 2013-02-20 21:23 ` Alessandro Rubini
2013-02-20 21:23 ` [PATCH V5 3/5] mmc: Use the new <linux/sizes.h> Alessandro Rubini
` (3 subsequent siblings)
5 siblings, 0 replies; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 21:23 UTC (permalink / raw)
To: linux-kernel
Cc: Giancarlo Asnaghi, Davide Ciminaghi, wim, tglx, mingo, hpa, x86
The SP805 driver is only used by the Spear machines, and uses
writel_relaxed, which is not available on all architectures.
The dependency from CONFIG_ARM avoids compilation problems under
randomconfig when CONFIG_ARM_AMBA is enabled for x86 builds.
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
Signed-off-by: Davide Ciminaghi <ciminaghi@gnudd.com>
Acked-by: Wim Van Sebroeck <wim@iguana.be>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
@Wim: I repost this after rebasing, on hpa's suggestion.
drivers/watchdog/Kconfig | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 83ac1f7..e89fc31 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -109,7 +109,7 @@ config WM8350_WATCHDOG
config ARM_SP805_WATCHDOG
tristate "ARM SP805 Watchdog"
- depends on ARM_AMBA
+ depends on ARM && ARM_AMBA
select WATCHDOG_CORE
help
ARM Primecell SP805 Watchdog timer. This will reboot your system when
--
1.7.7.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH V5 3/5] mmc: Use the new <linux/sizes.h>
2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
2013-02-20 21:23 ` [PATCH V5 1/5] DMA: PL330: use prefix in reg names to build under x86 Alessandro Rubini
2013-02-20 21:23 ` [PATCH V5 2/5] watchdog: sp805_wdt depends on ARM Alessandro Rubini
@ 2013-02-20 21:23 ` Alessandro Rubini
2013-02-20 21:24 ` [PATCH V5 4/5] drivers/amba: add support for a PCI bridge Alessandro Rubini
` (2 subsequent siblings)
5 siblings, 0 replies; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 21:23 UTC (permalink / raw)
To: linux-kernel; +Cc: Giancarlo Asnaghi, Davide Ciminaghi, davidb
For portability, use <linux/sizes.h>.
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
Acked-by: David Brown <davidb@codeaurora.org>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
@David: I repost this after rebasing, on hpa's suggestion.
drivers/mmc/host/mmci.c | 2 +-
drivers/mmc/host/msm_sdcc.c | 2 +-
drivers/mmc/host/mvsdio.c | 2 +-
drivers/mmc/host/mxcmmc.c | 2 +-
drivers/mmc/host/pxamci.c | 3 +--
5 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 372e921..a47aa70 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -34,11 +34,11 @@
#include <linux/amba/mmci.h>
#include <linux/pm_runtime.h>
#include <linux/types.h>
+#include <linux/sizes.h>
#include <linux/pinctrl/consumer.h>
#include <asm/div64.h>
#include <asm/io.h>
-#include <asm/sizes.h>
#include "mmci.h"
diff --git a/drivers/mmc/host/msm_sdcc.c b/drivers/mmc/host/msm_sdcc.c
index 7c0af0e..aa61b79 100644
--- a/drivers/mmc/host/msm_sdcc.c
+++ b/drivers/mmc/host/msm_sdcc.c
@@ -37,10 +37,10 @@
#include <linux/memory.h>
#include <linux/gfp.h>
#include <linux/gpio.h>
+#include <linux/sizes.h>
#include <asm/cacheflush.h>
#include <asm/div64.h>
-#include <asm/sizes.h>
#include <linux/platform_data/mmc-msm_sdcc.h>
#include <mach/msm_iomap.h>
diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c
index 145cdaf..53a1224 100644
--- a/drivers/mmc/host/mvsdio.c
+++ b/drivers/mmc/host/mvsdio.c
@@ -23,11 +23,11 @@
#include <linux/gpio.h>
#include <linux/of_gpio.h>
#include <linux/of_irq.h>
+#include <linux/sizes.h>
#include <linux/mmc/host.h>
#include <linux/mmc/slot-gpio.h>
#include <linux/pinctrl/consumer.h>
-#include <asm/sizes.h>
#include <asm/unaligned.h>
#include <linux/platform_data/mmc-mvsdio.h>
diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c
index a72936e..8ce7e73 100644
--- a/drivers/mmc/host/mxcmmc.c
+++ b/drivers/mmc/host/mxcmmc.c
@@ -34,10 +34,10 @@
#include <linux/regulator/consumer.h>
#include <linux/dmaengine.h>
#include <linux/types.h>
+#include <linux/sizes.h>
#include <asm/dma.h>
#include <asm/irq.h>
-#include <asm/sizes.h>
#include <linux/platform_data/mmc-mxcmmc.h>
#include <linux/platform_data/dma-imx.h>
diff --git a/drivers/mmc/host/pxamci.c b/drivers/mmc/host/pxamci.c
index 2b2f65a..6fa54a9 100644
--- a/drivers/mmc/host/pxamci.c
+++ b/drivers/mmc/host/pxamci.c
@@ -33,8 +33,7 @@
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/of_device.h>
-
-#include <asm/sizes.h>
+#include <linux/sizes.h>
#include <mach/hardware.h>
#include <mach/dma.h>
--
1.7.7.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
` (2 preceding siblings ...)
2013-02-20 21:23 ` [PATCH V5 3/5] mmc: Use the new <linux/sizes.h> Alessandro Rubini
@ 2013-02-20 21:24 ` Alessandro Rubini
2013-02-20 22:24 ` Russell King - ARM Linux
2013-02-20 21:24 ` [PATCH V5 5/5] x86: add CONFIG_ARM_AMBA, selected by STA2X11 Alessandro Rubini
2013-02-20 21:58 ` [PATCH V5 0/5] x86: a bridge from PCI to AMBA H. Peter Anvin
5 siblings, 1 reply; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 21:24 UTC (permalink / raw)
To: linux-kernel
Cc: Giancarlo Asnaghi, Davide Ciminaghi, linux, alan, tglx, mingo,
hpa, x86
This is a PCI driver that registers AMBA devices for the range of
supported devices. It is currently used by STA2X11, which exports
AMBA peripherals under PCIe. The original AMBA drivers work with no
changes or minimal ones.
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Alan Cox <alan@linux.intel.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
@Russell, Alan: I repost this after rebasing, on hpa's suggestion.
drivers/Kconfig | 2 +
drivers/amba/Kconfig | 10 +++++
drivers/amba/Makefile | 1 +
drivers/amba/pci-amba.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 106 insertions(+), 0 deletions(-)
create mode 100644 drivers/amba/Kconfig
create mode 100644 drivers/amba/pci-amba.c
diff --git a/drivers/Kconfig b/drivers/Kconfig
index 202fa6d..e17144d 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -162,4 +162,6 @@ source "drivers/irqchip/Kconfig"
source "drivers/ipack/Kconfig"
+source "drivers/amba/Kconfig"
+
endmenu
diff --git a/drivers/amba/Kconfig b/drivers/amba/Kconfig
new file mode 100644
index 0000000..b5b5aca
--- /dev/null
+++ b/drivers/amba/Kconfig
@@ -0,0 +1,10 @@
+
+config PCI_AMBA
+ tristate "PCI-to-AMBA bridge"
+ depends on ARM_AMBA && PCI
+ ---help---
+ This compiles a PCI driver that registers AMBA devices, so
+ the respective AMBA driver can be used unchanged if you have
+ a PCI to amba bridge. This is required for STA2X11 support.
+
+ If uncertain, choose N.
diff --git a/drivers/amba/Makefile b/drivers/amba/Makefile
index 66e81c2..d30e947 100644
--- a/drivers/amba/Makefile
+++ b/drivers/amba/Makefile
@@ -1,2 +1,3 @@
obj-$(CONFIG_ARM_AMBA) += bus.o
+obj-$(CONFIG_PCI_AMBA) += pci-amba.o
obj-$(CONFIG_TEGRA_AHB) += tegra-ahb.o
diff --git a/drivers/amba/pci-amba.c b/drivers/amba/pci-amba.c
new file mode 100644
index 0000000..ff46575
--- /dev/null
+++ b/drivers/amba/pci-amba.c
@@ -0,0 +1,93 @@
+/*
+ * Support for AMBA devices (both APB and AHB) behind a PCI bridge
+ * Copyright 2012 ST Microelectronics (Alessandro Rubini)
+ * GNU GPL version 2.
+ */
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/amba/bus.h>
+#include <linux/pci.h>
+#include <linux/pci_ids.h>
+#include <linux/slab.h>
+#include <linux/irq.h>
+#include <linux/sizes.h>
+
+static int pci_amba_probe(struct pci_dev *pdev,
+ const struct pci_device_id *id)
+{
+ struct amba_device *adev;
+ char *name;
+ int ret;
+
+ pci_enable_msi(pdev);
+ ret = pci_enable_device(pdev);
+ if (ret)
+ return ret;
+
+ /* Create a name: each of them must be different */
+ name = devm_kzalloc(&pdev->dev, strlen(dev_name(&pdev->dev)) + 6,
+ GFP_KERNEL);
+ sprintf(name, "amba-%s", dev_name(&pdev->dev));
+
+ /* Simply build an amba device and register it */
+ adev = amba_device_alloc(name, pdev->resource[0].start, SZ_4K);
+ if (!adev)
+ return -ENOMEM;
+ adev->irq[0] = pdev->irq;
+
+ /* This bridge can host both APB and AHB devices, so set master */
+ pci_set_master(pdev);
+ if (pdev->vendor == PCI_VENDOR_ID_STMICRO) {
+ /* Under sta2x11, DMA is there but limited to 512M */
+ adev->dma_mask = SZ_512M - 1;
+ adev->dev.coherent_dma_mask = SZ_512M - 1;
+ }
+
+ adev->dev.platform_data = pdev->dev.platform_data;
+ pci_set_drvdata(pdev, adev);
+
+ return amba_device_add(adev, &pdev->resource[0]);
+};
+
+static void pci_amba_remove(struct pci_dev *pdev)
+{
+ struct amba_device *adev = pci_get_drvdata(pdev);
+ amba_device_unregister(adev);
+ pci_disable_msi(pdev);
+}
+
+static DEFINE_PCI_DEVICE_TABLE(pci_amba_table) = {
+ {PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_UART_HWFC)},
+ {PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_UART_NO_HWFC)},
+ {PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_SOC_DMA)},
+ {PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_I2C)},
+ {PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_SPI_HS)},
+ {PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_SDIO_EMMC)},
+ {PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_SDIO)},
+ {PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_AUDIO_ROUTER_DMA)},
+ {PCI_VDEVICE(STMICRO, PCI_DEVICE_ID_STMICRO_AUDIO_ROUTER_MSPS)},
+ {0,}
+};
+
+static struct pci_driver pci_amba_driver = {
+ .name = "pci-amba",
+ .id_table = pci_amba_table,
+ .probe = pci_amba_probe,
+ .remove = pci_amba_remove,
+};
+
+static int __init pci_amba_init(void)
+{
+ return pci_register_driver(&pci_amba_driver);
+}
+
+static void __exit pci_amba_exit(void)
+{
+ pci_unregister_driver(&pci_amba_driver);
+}
+
+module_init(pci_amba_init);
+module_exit(pci_amba_exit);
+
+MODULE_LICENSE("GPL");
--
1.7.7.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH V5 5/5] x86: add CONFIG_ARM_AMBA, selected by STA2X11
2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
` (3 preceding siblings ...)
2013-02-20 21:24 ` [PATCH V5 4/5] drivers/amba: add support for a PCI bridge Alessandro Rubini
@ 2013-02-20 21:24 ` Alessandro Rubini
2013-02-20 21:58 ` [PATCH V5 0/5] x86: a bridge from PCI to AMBA H. Peter Anvin
5 siblings, 0 replies; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 21:24 UTC (permalink / raw)
To: linux-kernel; +Cc: Giancarlo Asnaghi, Alan Cox, tglx, mingo, hpa, x86
The sta2x11 I/O Hub is a bridge from PCIe to AMBA. It reuses a number
of amba drivers and needs to activate core bus support.
Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
arch/x86/Kconfig | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index b11f082..fc06c25 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -548,6 +548,7 @@ config STA2X11
select SWIOTLB
select MFD_STA2X11
select ARCH_REQUIRE_GPIOLIB
+ select ARM_AMBA
default n
---help---
This adds support for boards based on the STA2X11 IO-Hub,
@@ -2271,6 +2272,9 @@ config TS5500
endif # X86_32
+config ARM_AMBA
+ bool
+
config AMD_NB
def_bool y
depends on CPU_SUP_AMD && PCI
--
1.7.7.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH V5 0/5] x86: a bridge from PCI to AMBA
2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
` (4 preceding siblings ...)
2013-02-20 21:24 ` [PATCH V5 5/5] x86: add CONFIG_ARM_AMBA, selected by STA2X11 Alessandro Rubini
@ 2013-02-20 21:58 ` H. Peter Anvin
5 siblings, 0 replies; 13+ messages in thread
From: H. Peter Anvin @ 2013-02-20 21:58 UTC (permalink / raw)
To: Alessandro Rubini
Cc: linux-kernel, Giancarlo Asnaghi, Davide Ciminaghi, tglx, mingo,
x86
On 02/20/2013 01:22 PM, Alessandro Rubini wrote:
> This is a repost of patches I sent quite some time ago and are
> available from the "tip" repository, as branch "x86/amba" based on
> v3.7. That branch includes 7 patches but two of them are already
> upstream. Some of the other 5 had minor conflicts during rebase, but
> only in the initial "#include" area.
>
> I repost as Peter Anvin suggested. The commits in the tip
> repository included both hpa's signed off (which I left in)
> and the reference to the previous lkml message, which I removed
> as it is not current by the time this message exists.
>
> Some acked-by we received on the mailing list are not in the patch set
> because they are missing from tip::x86/amba which is authoritative.
>
Actually, no, they *should* be included. The only reason they wouldn't
be in tip:x86/amba was that they weren't received by the time they got
put in the branch.
Could you add them back in?
-hpa
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
2013-02-20 21:24 ` [PATCH V5 4/5] drivers/amba: add support for a PCI bridge Alessandro Rubini
@ 2013-02-20 22:24 ` Russell King - ARM Linux
2013-02-20 22:33 ` H. Peter Anvin
0 siblings, 1 reply; 13+ messages in thread
From: Russell King - ARM Linux @ 2013-02-20 22:24 UTC (permalink / raw)
To: Alessandro Rubini
Cc: linux-kernel, Giancarlo Asnaghi, Davide Ciminaghi, alan, tglx,
mingo, hpa, x86
On Wed, Feb 20, 2013 at 10:24:02PM +0100, Alessandro Rubini wrote:
> This is a PCI driver that registers AMBA devices for the range of
> supported devices. It is currently used by STA2X11, which exports
> AMBA peripherals under PCIe. The original AMBA drivers work with no
> changes or minimal ones.
>
> Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
> Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
> Cc: Russell King <linux@arm.linux.org.uk>
> Cc: Alan Cox <alan@linux.intel.com>
> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
> ---
>
> @Russell, Alan: I repost this after rebasing, on hpa's suggestion.
I'm happy to take it through my tree if everyone is now happy with this.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
2013-02-20 22:24 ` Russell King - ARM Linux
@ 2013-02-20 22:33 ` H. Peter Anvin
2013-02-20 22:45 ` Alessandro Rubini
0 siblings, 1 reply; 13+ messages in thread
From: H. Peter Anvin @ 2013-02-20 22:33 UTC (permalink / raw)
To: Russell King - ARM Linux
Cc: Alessandro Rubini, linux-kernel, Giancarlo Asnaghi,
Davide Ciminaghi, alan, tglx, mingo, x86
On 02/20/2013 02:24 PM, Russell King - ARM Linux wrote:
> On Wed, Feb 20, 2013 at 10:24:02PM +0100, Alessandro Rubini wrote:
>> This is a PCI driver that registers AMBA devices for the range of
>> supported devices. It is currently used by STA2X11, which exports
>> AMBA peripherals under PCIe. The original AMBA drivers work with no
>> changes or minimal ones.
>>
>> Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
>> Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
>> Cc: Russell King <linux@arm.linux.org.uk>
>> Cc: Alan Cox <alan@linux.intel.com>
>> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
>> ---
>>
>> @Russell, Alan: I repost this after rebasing, on hpa's suggestion.
>
> I'm happy to take it through my tree if everyone is now happy with this.
>
I am okay with that, although I would like to make sure we do a bunch of
x86 randconfigs on it before pushing it to Linus.
-hpa
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
2013-02-20 22:33 ` H. Peter Anvin
@ 2013-02-20 22:45 ` Alessandro Rubini
2013-02-20 22:50 ` H. Peter Anvin
0 siblings, 1 reply; 13+ messages in thread
From: Alessandro Rubini @ 2013-02-20 22:45 UTC (permalink / raw)
To: hpa
Cc: linux, linux-kernel, giancarlo.asnaghi, ciminaghi, alan, tglx,
mingo, x86
[meanwhile I posted V6 with the acked-by of linusw and others, that
were missing in V5]
rmk:
>> I'm happy to take it through my tree if everyone is now happy with this.
hpa:
> I am okay with that, although I would like to make sure we do a bunch of
> x86 randconfigs on it before pushing it to Linus.
I did like this:
- disable STA2X11 (and thus AMBA) and build
- enable STA2X11, answer y to all new questions and build
So there's nothing left (you'll have two unrelated warnings, that I'm
working on and I'll post a fix tomorrow). Sure, Peter, first time I
didn't do that test and missed some of the drivers.
Thanks
/alessandro
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
2013-02-20 22:45 ` Alessandro Rubini
@ 2013-02-20 22:50 ` H. Peter Anvin
2013-02-20 23:35 ` Russell King - ARM Linux
0 siblings, 1 reply; 13+ messages in thread
From: H. Peter Anvin @ 2013-02-20 22:50 UTC (permalink / raw)
To: Alessandro Rubini
Cc: linux, linux-kernel, giancarlo.asnaghi, ciminaghi, alan, tglx,
mingo, x86
On 02/20/2013 02:45 PM, Alessandro Rubini wrote:
> [meanwhile I posted V6 with the acked-by of linusw and others, that
> were missing in V5]
>
> rmk:
>>> I'm happy to take it through my tree if everyone is now happy with this.
>
> hpa:
>> I am okay with that, although I would like to make sure we do a bunch of
>> x86 randconfigs on it before pushing it to Linus.
>
> I did like this:
> - disable STA2X11 (and thus AMBA) and build
> - enable STA2X11, answer y to all new questions and build
>
> So there's nothing left (you'll have two unrelated warnings, that I'm
> working on and I'll post a fix tomorrow). Sure, Peter, first time I
> didn't do that test and missed some of the drivers.
>
I was just concerned that rmk wouldn't necessarily do those tests as a
matter of process.
So Russell -- how do you want to handle this? Should I take them (and
ask Ingo to put them through his test machinery) or do you want to (and
run x86 randconfigs as part of your testing)?
-hpa
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
2013-02-20 22:50 ` H. Peter Anvin
@ 2013-02-20 23:35 ` Russell King - ARM Linux
2013-02-20 23:37 ` H. Peter Anvin
0 siblings, 1 reply; 13+ messages in thread
From: Russell King - ARM Linux @ 2013-02-20 23:35 UTC (permalink / raw)
To: H. Peter Anvin
Cc: Alessandro Rubini, linux-kernel, giancarlo.asnaghi, ciminaghi,
alan, tglx, mingo, x86
On Wed, Feb 20, 2013 at 02:50:17PM -0800, H. Peter Anvin wrote:
> On 02/20/2013 02:45 PM, Alessandro Rubini wrote:
> > [meanwhile I posted V6 with the acked-by of linusw and others, that
> > were missing in V5]
> >
> > rmk:
> >>> I'm happy to take it through my tree if everyone is now happy with this.
> >
> > hpa:
> >> I am okay with that, although I would like to make sure we do a bunch of
> >> x86 randconfigs on it before pushing it to Linus.
> >
> > I did like this:
> > - disable STA2X11 (and thus AMBA) and build
> > - enable STA2X11, answer y to all new questions and build
> >
> > So there's nothing left (you'll have two unrelated warnings, that I'm
> > working on and I'll post a fix tomorrow). Sure, Peter, first time I
> > didn't do that test and missed some of the drivers.
> >
>
> I was just concerned that rmk wouldn't necessarily do those tests as a
> matter of process.
>
> So Russell -- how do you want to handle this? Should I take them (and
> ask Ingo to put them through his test machinery) or do you want to (and
> run x86 randconfigs as part of your testing)?
Well, I'm happy to take the non-x86 bits if that's what others want (for
the _next_ merge window, not this one.) That _should_ result in x86 not
seeing this stuff until it gets the ARM_AMBA definition enabled, and
giving it a full cycle of testing.
However, if we want to keep the patch set together and route it via
another tree, I'm also fine with that too.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH V5 4/5] drivers/amba: add support for a PCI bridge
2013-02-20 23:35 ` Russell King - ARM Linux
@ 2013-02-20 23:37 ` H. Peter Anvin
0 siblings, 0 replies; 13+ messages in thread
From: H. Peter Anvin @ 2013-02-20 23:37 UTC (permalink / raw)
To: Russell King - ARM Linux
Cc: Alessandro Rubini, linux-kernel, giancarlo.asnaghi, ciminaghi,
alan, tglx, mingo, x86
On 02/20/2013 03:35 PM, Russell King - ARM Linux wrote:
> On Wed, Feb 20, 2013 at 02:50:17PM -0800, H. Peter Anvin wrote:
>> On 02/20/2013 02:45 PM, Alessandro Rubini wrote:
>>> [meanwhile I posted V6 with the acked-by of linusw and others, that
>>> were missing in V5]
>>>
>>> rmk:
>>>>> I'm happy to take it through my tree if everyone is now happy with this.
>>>
>>> hpa:
>>>> I am okay with that, although I would like to make sure we do a bunch of
>>>> x86 randconfigs on it before pushing it to Linus.
>>>
>>> I did like this:
>>> - disable STA2X11 (and thus AMBA) and build
>>> - enable STA2X11, answer y to all new questions and build
>>>
>>> So there's nothing left (you'll have two unrelated warnings, that I'm
>>> working on and I'll post a fix tomorrow). Sure, Peter, first time I
>>> didn't do that test and missed some of the drivers.
>>>
>>
>> I was just concerned that rmk wouldn't necessarily do those tests as a
>> matter of process.
>>
>> So Russell -- how do you want to handle this? Should I take them (and
>> ask Ingo to put them through his test machinery) or do you want to (and
>> run x86 randconfigs as part of your testing)?
>
> Well, I'm happy to take the non-x86 bits if that's what others want (for
> the _next_ merge window, not this one.) That _should_ result in x86 not
> seeing this stuff until it gets the ARM_AMBA definition enabled, and
> giving it a full cycle of testing.
>
> However, if we want to keep the patch set together and route it via
> another tree, I'm also fine with that too.
>
Actually, between linux-next and Fengguang's zeroday testbot I suspect
we'll get all the coverage we need. So yes, go ahead and take them.
Acked-by: H. Peter Anvin <hpa@linux.intel.com>
-hpa
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2013-02-20 23:39 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-20 21:22 [PATCH V5 0/5] x86: a bridge from PCI to AMBA Alessandro Rubini
2013-02-20 21:23 ` [PATCH V5 1/5] DMA: PL330: use prefix in reg names to build under x86 Alessandro Rubini
2013-02-20 21:23 ` [PATCH V5 2/5] watchdog: sp805_wdt depends on ARM Alessandro Rubini
2013-02-20 21:23 ` [PATCH V5 3/5] mmc: Use the new <linux/sizes.h> Alessandro Rubini
2013-02-20 21:24 ` [PATCH V5 4/5] drivers/amba: add support for a PCI bridge Alessandro Rubini
2013-02-20 22:24 ` Russell King - ARM Linux
2013-02-20 22:33 ` H. Peter Anvin
2013-02-20 22:45 ` Alessandro Rubini
2013-02-20 22:50 ` H. Peter Anvin
2013-02-20 23:35 ` Russell King - ARM Linux
2013-02-20 23:37 ` H. Peter Anvin
2013-02-20 21:24 ` [PATCH V5 5/5] x86: add CONFIG_ARM_AMBA, selected by STA2X11 Alessandro Rubini
2013-02-20 21:58 ` [PATCH V5 0/5] x86: a bridge from PCI to AMBA H. Peter Anvin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox