mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
ARM: SoC platform updates for v4.6
Newly added support for additional SoCs:
- Axis Artpec-6 SoC family
- Allwinner A83T SoC
- Mediatek MT7623
- NXP i.MX6QP SoC
- ST Microelectronics stm32f469 microcontroller
New features:
- SMP support for Mediatek mt2701
- Big-endian support for NXP i.MX
- DaVinci now uses the new DMA engine dma_slave_map
- OMAP now uses the new DMA engine dma_slave_map
- earlyprintk support for palmchip uart on mach-tango
- delay timer support for orion
Other:
- Exynos PMU driver moved out to drivers/soc/
- Various smaller updates for Renesas, Xilinx, PXA, AT91, OMAP, uniphier
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIVAwUAVu68DGCrR//JCVInAQIHVQ//Wblms+NKj3aKh6m2Sscs/YkSbFaQ4sY2
rNyfxLIYsLXkth1kbdHRFSMyL68Ym+xutErgw/3HQPB2D1YtYJE3VJ/y8AU92SU3
oHyQIty+atB8d8zBbtlkWmat94NIfYf0I8PQETreGb1LMaJqAf0mDEDAyorTLZcZ
UtQ817Ihn7urqwdTJpTO58V41RmY/vflbHI5T6bIjUJn6fF1e/7+VqtMIfq5sjJ6
0EPEQdu8s5AJ7gcGlGi9I5gAtSnWSA/9phAxul9P8/HrMpUWIxreSEAy8FY7W14F
4TON3sQrnw7nyA72U80KGIXhgLy7SbEmHcSqyy4YJK3ycdk6VYk0CBO7nWVYAiD1
knLisOH6jwe0LIj9WXiRR+Y2Q53pXN8SF77pLDahSnvuShnYEjEH5uELHtxe7Vxh
gn+NH1rDkRTgdYgt4RWlVyUoLkddQWzLb1m4QyQlvxtTR25cJJayXdVX2MRrNPF5
c1zRa9HH+b8LJQIMdWfo/NoHhHtftkkGGsqHAAaypZqdpyk0j2HpJYk5ecPR4f5C
/8o/h/5xOI9gEzp/DVYSZ1VAvRqBQGIDfKBXWq6GuoZaF0aN8ISe5IxFn5Yx2F46
fNaxqiNpWmyywl8D+tSWPFK6aE21AXKGi5zIzexZZqy283aDjlUPI+tgF2GKIuKP
3ayYTDeBpLI=
=ynNj
-----END PGP SIGNATURE-----
Merge tag 'armsoc-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC platform updates from Arnd Bergmann:
"Newly added support for additional SoCs:
- Axis Artpec-6 SoC family
- Allwinner A83T SoC
- Mediatek MT7623
- NXP i.MX6QP SoC
- ST Microelectronics stm32f469 microcontroller
New features:
- SMP support for Mediatek mt2701
- Big-endian support for NXP i.MX
- DaVinci now uses the new DMA engine dma_slave_map
- OMAP now uses the new DMA engine dma_slave_map
- earlyprintk support for palmchip uart on mach-tango
- delay timer support for orion
Other:
- Exynos PMU driver moved out to drivers/soc/
- Various smaller updates for Renesas, Xilinx, PXA, AT91, OMAP,
uniphier"
* tag 'armsoc-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (83 commits)
ARM: uniphier: rework SMP code to support new System Bus binding
ARM: uniphier: add missing of_node_put()
ARM: at91: avoid defining CONFIG_* symbols in source code
ARM: DRA7: hwmod: Add data for eDMA tpcc, tptc0, tptc1
ARM: imx: Make reset_control_ops const
ARM: imx: Do L2 errata only if the L2 cache isn't enabled
ARM: imx: select ARM_CPU_SUSPEND only for imx6
dmaengine: pxa_dma: fix the maximum requestor line
ARM: alpine: select the Alpine MSI controller driver
ARM: pxa: add the number of DMA requestor lines
dmaengine: mmp-pdma: add number of requestors
dma: mmp_pdma: Add the #dma-requests DT property documentation
ARM: OMAP2+: Add rtc hwmod configuration for ti81xx
ARM: s3c24xx: Avoid warning for inb/outb
ARM: zynq: Move early printk virtual address to vmalloc area
ARM: DRA7: hwmod: Add custom reset handler for PCIeSS
ARM: SAMSUNG: Remove unused register offset definition
ARM: EXYNOS: Cleanup header files inclusion
drivers: soc: samsung: Enable COMPILE_TEST
MAINTAINERS: Add maintainers entry for drivers/soc/samsung
...
This commit is contained in:
commit
33b3d2e88c
126 changed files with 2108 additions and 1384 deletions
|
|
@ -122,6 +122,7 @@ struct pxad_chan {
|
|||
struct pxad_device {
|
||||
struct dma_device slave;
|
||||
int nr_chans;
|
||||
int nr_requestors;
|
||||
void __iomem *base;
|
||||
struct pxad_phy *phys;
|
||||
spinlock_t phy_lock; /* Phy association */
|
||||
|
|
@ -473,7 +474,7 @@ static void pxad_free_phy(struct pxad_chan *chan)
|
|||
return;
|
||||
|
||||
/* clear the channel mapping in DRCMR */
|
||||
if (chan->drcmr <= DRCMR_CHLNUM) {
|
||||
if (chan->drcmr <= pdev->nr_requestors) {
|
||||
reg = pxad_drcmr(chan->drcmr);
|
||||
writel_relaxed(0, chan->phy->base + reg);
|
||||
}
|
||||
|
|
@ -509,6 +510,7 @@ static bool is_running_chan_misaligned(struct pxad_chan *chan)
|
|||
|
||||
static void phy_enable(struct pxad_phy *phy, bool misaligned)
|
||||
{
|
||||
struct pxad_device *pdev;
|
||||
u32 reg, dalgn;
|
||||
|
||||
if (!phy->vchan)
|
||||
|
|
@ -518,7 +520,8 @@ static void phy_enable(struct pxad_phy *phy, bool misaligned)
|
|||
"%s(); phy=%p(%d) misaligned=%d\n", __func__,
|
||||
phy, phy->idx, misaligned);
|
||||
|
||||
if (phy->vchan->drcmr <= DRCMR_CHLNUM) {
|
||||
pdev = to_pxad_dev(phy->vchan->vc.chan.device);
|
||||
if (phy->vchan->drcmr <= pdev->nr_requestors) {
|
||||
reg = pxad_drcmr(phy->vchan->drcmr);
|
||||
writel_relaxed(DRCMR_MAPVLD | phy->idx, phy->base + reg);
|
||||
}
|
||||
|
|
@ -914,6 +917,7 @@ static void pxad_get_config(struct pxad_chan *chan,
|
|||
{
|
||||
u32 maxburst = 0, dev_addr = 0;
|
||||
enum dma_slave_buswidth width = DMA_SLAVE_BUSWIDTH_UNDEFINED;
|
||||
struct pxad_device *pdev = to_pxad_dev(chan->vc.chan.device);
|
||||
|
||||
*dcmd = 0;
|
||||
if (dir == DMA_DEV_TO_MEM) {
|
||||
|
|
@ -922,7 +926,7 @@ static void pxad_get_config(struct pxad_chan *chan,
|
|||
dev_addr = chan->cfg.src_addr;
|
||||
*dev_src = dev_addr;
|
||||
*dcmd |= PXA_DCMD_INCTRGADDR;
|
||||
if (chan->drcmr <= DRCMR_CHLNUM)
|
||||
if (chan->drcmr <= pdev->nr_requestors)
|
||||
*dcmd |= PXA_DCMD_FLOWSRC;
|
||||
}
|
||||
if (dir == DMA_MEM_TO_DEV) {
|
||||
|
|
@ -931,7 +935,7 @@ static void pxad_get_config(struct pxad_chan *chan,
|
|||
dev_addr = chan->cfg.dst_addr;
|
||||
*dev_dst = dev_addr;
|
||||
*dcmd |= PXA_DCMD_INCSRCADDR;
|
||||
if (chan->drcmr <= DRCMR_CHLNUM)
|
||||
if (chan->drcmr <= pdev->nr_requestors)
|
||||
*dcmd |= PXA_DCMD_FLOWTRG;
|
||||
}
|
||||
if (dir == DMA_MEM_TO_MEM)
|
||||
|
|
@ -1341,13 +1345,15 @@ static struct dma_chan *pxad_dma_xlate(struct of_phandle_args *dma_spec,
|
|||
|
||||
static int pxad_init_dmadev(struct platform_device *op,
|
||||
struct pxad_device *pdev,
|
||||
unsigned int nr_phy_chans)
|
||||
unsigned int nr_phy_chans,
|
||||
unsigned int nr_requestors)
|
||||
{
|
||||
int ret;
|
||||
unsigned int i;
|
||||
struct pxad_chan *c;
|
||||
|
||||
pdev->nr_chans = nr_phy_chans;
|
||||
pdev->nr_requestors = nr_requestors;
|
||||
INIT_LIST_HEAD(&pdev->slave.channels);
|
||||
pdev->slave.device_alloc_chan_resources = pxad_alloc_chan_resources;
|
||||
pdev->slave.device_free_chan_resources = pxad_free_chan_resources;
|
||||
|
|
@ -1382,7 +1388,7 @@ static int pxad_probe(struct platform_device *op)
|
|||
const struct of_device_id *of_id;
|
||||
struct mmp_dma_platdata *pdata = dev_get_platdata(&op->dev);
|
||||
struct resource *iores;
|
||||
int ret, dma_channels = 0;
|
||||
int ret, dma_channels = 0, nb_requestors = 0;
|
||||
const enum dma_slave_buswidth widths =
|
||||
DMA_SLAVE_BUSWIDTH_1_BYTE | DMA_SLAVE_BUSWIDTH_2_BYTES |
|
||||
DMA_SLAVE_BUSWIDTH_4_BYTES;
|
||||
|
|
@ -1399,13 +1405,23 @@ static int pxad_probe(struct platform_device *op)
|
|||
return PTR_ERR(pdev->base);
|
||||
|
||||
of_id = of_match_device(pxad_dt_ids, &op->dev);
|
||||
if (of_id)
|
||||
if (of_id) {
|
||||
of_property_read_u32(op->dev.of_node, "#dma-channels",
|
||||
&dma_channels);
|
||||
else if (pdata && pdata->dma_channels)
|
||||
ret = of_property_read_u32(op->dev.of_node, "#dma-requests",
|
||||
&nb_requestors);
|
||||
if (ret) {
|
||||
dev_warn(pdev->slave.dev,
|
||||
"#dma-requests set to default 32 as missing in OF: %d",
|
||||
ret);
|
||||
nb_requestors = 32;
|
||||
};
|
||||
} else if (pdata && pdata->dma_channels) {
|
||||
dma_channels = pdata->dma_channels;
|
||||
else
|
||||
nb_requestors = pdata->nb_requestors;
|
||||
} else {
|
||||
dma_channels = 32; /* default 32 channel */
|
||||
}
|
||||
|
||||
dma_cap_set(DMA_SLAVE, pdev->slave.cap_mask);
|
||||
dma_cap_set(DMA_MEMCPY, pdev->slave.cap_mask);
|
||||
|
|
@ -1423,7 +1439,7 @@ static int pxad_probe(struct platform_device *op)
|
|||
pdev->slave.descriptor_reuse = true;
|
||||
|
||||
pdev->slave.dev = &op->dev;
|
||||
ret = pxad_init_dmadev(op, pdev, dma_channels);
|
||||
ret = pxad_init_dmadev(op, pdev, dma_channels, nb_requestors);
|
||||
if (ret) {
|
||||
dev_err(pdev->slave.dev, "unable to register\n");
|
||||
return ret;
|
||||
|
|
@ -1442,7 +1458,8 @@ static int pxad_probe(struct platform_device *op)
|
|||
|
||||
platform_set_drvdata(op, pdev);
|
||||
pxad_init_debugfs(pdev);
|
||||
dev_info(pdev->slave.dev, "initialized %d channels\n", dma_channels);
|
||||
dev_info(pdev->slave.dev, "initialized %d channels on %d requestors\n",
|
||||
dma_channels, nb_requestors);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue