Commit 1c277cae authored by Arnd Bergmann's avatar Arnd Bergmann

Merge tag 'pxa-for-4.6' of https://github.com/rjarzmik/linux into next/soc

Merge "pxa changes for v4.6 cycle" from Robert Jarzmik:

This is a minor cycle with :
 - cleanup fixes from Arnd, mainly build oriented and sparse type ones
 - dma fixes for requestors above 32 (impacting mainly camera driver)
 - some minor cleanup on pxa3xx device-tree side

* tag 'pxa-for-4.6' of https://github.com/rjarzmik/linux:
  dmaengine: pxa_dma: fix the maximum requestor line
  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: pxa: pxa3xx device-tree support cleanup
  ARM: pxa: don't select RFKILL if CONFIG_NET is disabled
  ARM: pxa: fix building without IWMMXT
  ARM: pxa: move extern declarations to pm.h
  ARM: pxa: always select one of the two CPU types
  ARM: pxa: don't select GPIO_SYSFS for MIOA701
  ARM: pxa: mark unused eseries code as __maybe_unused
  ARM: pxa: mark spitz_card_pwr_ctrl as __maybe_unused
  ARM: pxa: define clock registers as __iomem
parents 7b8685d9 6bab1c6a
...@@ -12,6 +12,8 @@ Required properties: ...@@ -12,6 +12,8 @@ Required properties:
Optional properties: Optional properties:
- #dma-channels: Number of DMA channels supported by the controller (defaults - #dma-channels: Number of DMA channels supported by the controller (defaults
to 32 when not specified) to 32 when not specified)
- #dma-requests: Number of DMA requestor lines supported by the controller
(defaults to 32 when not specified)
"marvell,pdma-1.0" "marvell,pdma-1.0"
Used platforms: pxa25x, pxa27x, pxa3xx, pxa93x, pxa168, pxa910, pxa688. Used platforms: pxa25x, pxa27x, pxa3xx, pxa93x, pxa168, pxa910, pxa688.
......
...@@ -547,6 +547,7 @@ config ARCH_PXA ...@@ -547,6 +547,7 @@ config ARCH_PXA
select CLKSRC_PXA select CLKSRC_PXA
select CLKSRC_MMIO select CLKSRC_MMIO
select CLKSRC_OF select CLKSRC_OF
select CPU_XSCALE if !CPU_XSC3
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select GPIO_PXA select GPIO_PXA
select HAVE_IDE select HAVE_IDE
......
...@@ -13,6 +13,7 @@ pdma: dma-controller@40000000 { ...@@ -13,6 +13,7 @@ pdma: dma-controller@40000000 {
interrupts = <25>; interrupts = <25>;
#dma-channels = <32>; #dma-channels = <32>;
#dma-cells = <2>; #dma-cells = <2>;
#dma-requests = <75>;
status = "okay"; status = "okay";
}; };
......
...@@ -12,6 +12,7 @@ pdma: dma-controller@40000000 { ...@@ -12,6 +12,7 @@ pdma: dma-controller@40000000 {
interrupts = <25>; interrupts = <25>;
#dma-channels = <32>; #dma-channels = <32>;
#dma-cells = <2>; #dma-cells = <2>;
#dma-requests = <100>;
status = "okay"; status = "okay";
}; };
......
...@@ -378,6 +378,7 @@ CONFIG_GPIO_PALMAS=y ...@@ -378,6 +378,7 @@ CONFIG_GPIO_PALMAS=y
CONFIG_GPIO_TPS6586X=y CONFIG_GPIO_TPS6586X=y
CONFIG_GPIO_TPS65910=y CONFIG_GPIO_TPS65910=y
CONFIG_GPIO_MAX7301=m CONFIG_GPIO_MAX7301=m
CONFIG_GPIO_SYSFS=y
CONFIG_POWER_SUPPLY_DEBUG=y CONFIG_POWER_SUPPLY_DEBUG=y
CONFIG_PDA_POWER=m CONFIG_PDA_POWER=m
CONFIG_BATTERY_SBS=m CONFIG_BATTERY_SBS=m
......
...@@ -297,7 +297,6 @@ config MACH_MAGICIAN ...@@ -297,7 +297,6 @@ config MACH_MAGICIAN
config MACH_MIOA701 config MACH_MIOA701
bool "Mitac Mio A701 Support" bool "Mitac Mio A701 Support"
select GPIO_SYSFS
select IWMMXT select IWMMXT
select PXA27x select PXA27x
help help
...@@ -529,7 +528,7 @@ config MACH_TOSA ...@@ -529,7 +528,7 @@ config MACH_TOSA
config TOSA_BT config TOSA_BT
tristate "Control the state of built-in bluetooth chip on Sharp SL-6000" tristate "Control the state of built-in bluetooth chip on Sharp SL-6000"
depends on MACH_TOSA depends on MACH_TOSA && NET
select RFKILL select RFKILL
help help
This is a simple driver that is able to control This is a simple driver that is able to control
......
...@@ -1203,6 +1203,7 @@ void __init pxa2xx_set_spi_info(unsigned id, struct pxa2xx_spi_master *info) ...@@ -1203,6 +1203,7 @@ void __init pxa2xx_set_spi_info(unsigned id, struct pxa2xx_spi_master *info)
static struct mmp_dma_platdata pxa_dma_pdata = { static struct mmp_dma_platdata pxa_dma_pdata = {
.dma_channels = 0, .dma_channels = 0,
.nb_requestors = 0,
}; };
static struct resource pxa_dma_resource[] = { static struct resource pxa_dma_resource[] = {
...@@ -1231,7 +1232,7 @@ static struct platform_device pxa2xx_pxa_dma = { ...@@ -1231,7 +1232,7 @@ static struct platform_device pxa2xx_pxa_dma = {
.resource = pxa_dma_resource, .resource = pxa_dma_resource,
}; };
void __init pxa2xx_set_dmac_info(int nb_channels) void __init pxa2xx_set_dmac_info(int nb_channels, int nb_requestors)
{ {
pxa_dma_pdata.dma_channels = nb_channels; pxa_dma_pdata.dma_channels = nb_channels;
pxa_register_device(&pxa2xx_pxa_dma, &pxa_dma_pdata); pxa_register_device(&pxa2xx_pxa_dma, &pxa_dma_pdata);
......
...@@ -57,7 +57,7 @@ struct gpio_vbus_mach_info e7xx_udc_info = { ...@@ -57,7 +57,7 @@ struct gpio_vbus_mach_info e7xx_udc_info = {
.gpio_pullup_inverted = 1 .gpio_pullup_inverted = 1
}; };
static struct platform_device e7xx_gpio_vbus = { static struct platform_device e7xx_gpio_vbus __maybe_unused = {
.name = "gpio-vbus", .name = "gpio-vbus",
.id = -1, .id = -1,
.dev = { .dev = {
...@@ -126,7 +126,7 @@ struct resource eseries_tmio_resources[] = { ...@@ -126,7 +126,7 @@ struct resource eseries_tmio_resources[] = {
}; };
/* Some e-series hardware cannot control the 32K clock */ /* Some e-series hardware cannot control the 32K clock */
static void __init eseries_register_clks(void) static void __init __maybe_unused eseries_register_clks(void)
{ {
clk_register_fixed_rate(NULL, "CLK_CK32K", NULL, CLK_IS_ROOT, 32768); clk_register_fixed_rate(NULL, "CLK_CK32K", NULL, CLK_IS_ROOT, 32768);
} }
......
...@@ -139,14 +139,14 @@ static void gumstix_setup_bt_clock(void) ...@@ -139,14 +139,14 @@ static void gumstix_setup_bt_clock(void)
{ {
int timeout = 500; int timeout = 500;
if (!(OSCC & OSCC_OOK)) if (!(readl(OSCC) & OSCC_OOK))
pr_warn("32kHz clock was not on. Bootloader may need to be updated\n"); pr_warn("32kHz clock was not on. Bootloader may need to be updated\n");
else else
return; return;
OSCC |= OSCC_OON; writel(readl(OSCC) | OSCC_OON, OSCC);
do { do {
if (OSCC & OSCC_OOK) if (readl(OSCC) & OSCC_OOK)
break; break;
udelay(1); udelay(1);
} while (--timeout); } while (--timeout);
......
...@@ -134,10 +134,10 @@ ...@@ -134,10 +134,10 @@
/* /*
* PXA2xx specific Core clock definitions * PXA2xx specific Core clock definitions
*/ */
#define CCCR __REG(0x41300000) /* Core Clock Configuration Register */ #define CCCR io_p2v(0x41300000) /* Core Clock Configuration Register */
#define CCSR __REG(0x4130000C) /* Core Clock Status Register */ #define CCSR io_p2v(0x4130000C) /* Core Clock Status Register */
#define CKEN __REG(0x41300004) /* Clock Enable Register */ #define CKEN io_p2v(0x41300004) /* Clock Enable Register */
#define OSCC __REG(0x41300008) /* Oscillator Configuration Register */ #define OSCC io_p2v(0x41300008) /* Oscillator Configuration Register */
#define CCCR_N_MASK 0x0380 /* Run Mode Frequency to Turbo Mode Frequency Multiplier */ #define CCCR_N_MASK 0x0380 /* Run Mode Frequency to Turbo Mode Frequency Multiplier */
#define CCCR_M_MASK 0x0060 /* Memory Frequency to Run Mode Frequency Multiplier */ #define CCCR_M_MASK 0x0060 /* Memory Frequency to Run Mode Frequency Multiplier */
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
/* /*
* Oscillator Configuration Register (OSCC) * Oscillator Configuration Register (OSCC)
*/ */
#define OSCC __REG(0x41350000) /* Oscillator Configuration Register */ #define OSCC io_p2v(0x41350000) /* Oscillator Configuration Register */
#define OSCC_PEN (1 << 11) /* 13MHz POUT */ #define OSCC_PEN (1 << 11) /* 13MHz POUT */
......
...@@ -29,6 +29,9 @@ extern int pxa_pm_enter(suspend_state_t state); ...@@ -29,6 +29,9 @@ extern int pxa_pm_enter(suspend_state_t state);
extern int pxa_pm_prepare(void); extern int pxa_pm_prepare(void);
extern void pxa_pm_finish(void); extern void pxa_pm_finish(void);
extern const char pm_enter_standby_start[], pm_enter_standby_end[];
extern int pxa3xx_finish_suspend(unsigned long);
/* NOTE: this is for PM debugging on Lubbock, it's really a big /* NOTE: this is for PM debugging on Lubbock, it's really a big
* ugly, but let's keep the crap minimum here, instead of direct * ugly, but let's keep the crap minimum here, instead of direct
* accessing the LUBBOCK CPLD registers in arch/arm/mach-pxa/pm.c * accessing the LUBBOCK CPLD registers in arch/arm/mach-pxa/pm.c
......
...@@ -19,42 +19,18 @@ ...@@ -19,42 +19,18 @@
#include "generic.h" #include "generic.h"
#ifdef CONFIG_PXA3xx #ifdef CONFIG_PXA3xx
static const struct of_dev_auxdata const pxa3xx_auxdata_lookup[] __initconst = {
OF_DEV_AUXDATA("mrvl,pxa-uart", 0x40100000, "pxa2xx-uart.0", NULL),
OF_DEV_AUXDATA("mrvl,pxa-uart", 0x40200000, "pxa2xx-uart.1", NULL),
OF_DEV_AUXDATA("mrvl,pxa-uart", 0x40700000, "pxa2xx-uart.2", NULL),
OF_DEV_AUXDATA("mrvl,pxa-uart", 0x41600000, "pxa2xx-uart.3", NULL),
OF_DEV_AUXDATA("marvell,pxa-mmc", 0x41100000, "pxa2xx-mci.0", NULL),
OF_DEV_AUXDATA("intel,pxa3xx-gpio", 0x40e00000, "pxa3xx-gpio", NULL),
OF_DEV_AUXDATA("marvell,pxa-ohci", 0x4c000000, "pxa27x-ohci", NULL),
OF_DEV_AUXDATA("mrvl,pxa-i2c", 0x40301680, "pxa2xx-i2c.0", NULL),
OF_DEV_AUXDATA("mrvl,pwri2c", 0x40f500c0, "pxa3xx-i2c.1", NULL),
OF_DEV_AUXDATA("marvell,pxa3xx-nand", 0x43100000, "pxa3xx-nand", NULL),
{}
};
static void __init pxa3xx_dt_init(void)
{
of_platform_populate(NULL, of_default_bus_match_table,
pxa3xx_auxdata_lookup, NULL);
}
static const char *const pxa3xx_dt_board_compat[] __initconst = { static const char *const pxa3xx_dt_board_compat[] __initconst = {
"marvell,pxa300", "marvell,pxa300",
"marvell,pxa310", "marvell,pxa310",
"marvell,pxa320", "marvell,pxa320",
NULL, NULL,
}; };
#endif
#ifdef CONFIG_PXA3xx
DT_MACHINE_START(PXA_DT, "Marvell PXA3xx (Device Tree Support)") DT_MACHINE_START(PXA_DT, "Marvell PXA3xx (Device Tree Support)")
.map_io = pxa3xx_map_io, .map_io = pxa3xx_map_io,
.init_irq = pxa3xx_dt_init_irq, .init_irq = pxa3xx_dt_init_irq,
.handle_irq = pxa3xx_handle_irq, .handle_irq = pxa3xx_handle_irq,
.init_time = pxa_timer_init,
.restart = pxa_restart, .restart = pxa_restart,
.init_machine = pxa3xx_dt_init,
.dt_compat = pxa3xx_dt_board_compat, .dt_compat = pxa3xx_dt_board_compat,
MACHINE_END MACHINE_END
#endif #endif
......
...@@ -206,7 +206,7 @@ static int __init pxa25x_init(void) ...@@ -206,7 +206,7 @@ static int __init pxa25x_init(void)
register_syscore_ops(&pxa_irq_syscore_ops); register_syscore_ops(&pxa_irq_syscore_ops);
register_syscore_ops(&pxa2xx_mfp_syscore_ops); register_syscore_ops(&pxa2xx_mfp_syscore_ops);
pxa2xx_set_dmac_info(16); pxa2xx_set_dmac_info(16, 40);
pxa_register_device(&pxa25x_device_gpio, &pxa25x_gpio_info); pxa_register_device(&pxa25x_device_gpio, &pxa25x_gpio_info);
ret = platform_add_devices(pxa25x_devices, ret = platform_add_devices(pxa25x_devices,
ARRAY_SIZE(pxa25x_devices)); ARRAY_SIZE(pxa25x_devices));
......
...@@ -132,7 +132,8 @@ void pxa27x_cpu_pm_enter(suspend_state_t state) ...@@ -132,7 +132,8 @@ void pxa27x_cpu_pm_enter(suspend_state_t state)
#ifndef CONFIG_IWMMXT #ifndef CONFIG_IWMMXT
u64 acc0; u64 acc0;
asm volatile("mra %Q0, %R0, acc0" : "=r" (acc0)); asm volatile(".arch_extension xscale\n\t"
"mra %Q0, %R0, acc0" : "=r" (acc0));
#endif #endif
/* ensure voltage-change sequencer not initiated, which hangs */ /* ensure voltage-change sequencer not initiated, which hangs */
...@@ -151,7 +152,8 @@ void pxa27x_cpu_pm_enter(suspend_state_t state) ...@@ -151,7 +152,8 @@ void pxa27x_cpu_pm_enter(suspend_state_t state)
case PM_SUSPEND_MEM: case PM_SUSPEND_MEM:
cpu_suspend(pwrmode, pxa27x_finish_suspend); cpu_suspend(pwrmode, pxa27x_finish_suspend);
#ifndef CONFIG_IWMMXT #ifndef CONFIG_IWMMXT
asm volatile("mar acc0, %Q0, %R0" : "=r" (acc0)); asm volatile(".arch_extension xscale\n\t"
"mar acc0, %Q0, %R0" : "=r" (acc0));
#endif #endif
break; break;
} }
...@@ -309,7 +311,7 @@ static int __init pxa27x_init(void) ...@@ -309,7 +311,7 @@ static int __init pxa27x_init(void)
if (!of_have_populated_dt()) { if (!of_have_populated_dt()) {
pxa_register_device(&pxa27x_device_gpio, pxa_register_device(&pxa27x_device_gpio,
&pxa27x_gpio_info); &pxa27x_gpio_info);
pxa2xx_set_dmac_info(32); pxa2xx_set_dmac_info(32, 75);
ret = platform_add_devices(devices, ret = platform_add_devices(devices,
ARRAY_SIZE(devices)); ARRAY_SIZE(devices));
} }
......
...@@ -68,7 +68,6 @@ static unsigned long wakeup_src; ...@@ -68,7 +68,6 @@ static unsigned long wakeup_src;
*/ */
static void pxa3xx_cpu_standby(unsigned int pwrmode) static void pxa3xx_cpu_standby(unsigned int pwrmode)
{ {
extern const char pm_enter_standby_start[], pm_enter_standby_end[];
void (*fn)(unsigned int) = (void __force *)(sram + 0x8000); void (*fn)(unsigned int) = (void __force *)(sram + 0x8000);
memcpy_toio(sram + 0x8000, pm_enter_standby_start, memcpy_toio(sram + 0x8000, pm_enter_standby_start,
...@@ -103,11 +102,10 @@ static void pxa3xx_cpu_pm_suspend(void) ...@@ -103,11 +102,10 @@ static void pxa3xx_cpu_pm_suspend(void)
#ifndef CONFIG_IWMMXT #ifndef CONFIG_IWMMXT
u64 acc0; u64 acc0;
asm volatile("mra %Q0, %R0, acc0" : "=r" (acc0)); asm volatile(".arch_extension xscale\n\t"
"mra %Q0, %R0, acc0" : "=r" (acc0));
#endif #endif
extern int pxa3xx_finish_suspend(unsigned long);
/* resuming from D2 requires the HSIO2/BOOT/TPM clocks enabled */ /* resuming from D2 requires the HSIO2/BOOT/TPM clocks enabled */
CKENA |= (1 << CKEN_BOOT) | (1 << CKEN_TPM); CKENA |= (1 << CKEN_BOOT) | (1 << CKEN_TPM);
CKENB |= 1 << (CKEN_HSIO2 & 0x1f); CKENB |= 1 << (CKEN_HSIO2 & 0x1f);
...@@ -133,7 +131,8 @@ static void pxa3xx_cpu_pm_suspend(void) ...@@ -133,7 +131,8 @@ static void pxa3xx_cpu_pm_suspend(void)
AD3ER = 0; AD3ER = 0;
#ifndef CONFIG_IWMMXT #ifndef CONFIG_IWMMXT
asm volatile("mar acc0, %Q0, %R0" : "=r" (acc0)); asm volatile(".arch_extension xscale\n\t"
"mar acc0, %Q0, %R0" : "=r" (acc0));
#endif #endif
} }
...@@ -450,7 +449,7 @@ static int __init pxa3xx_init(void) ...@@ -450,7 +449,7 @@ static int __init pxa3xx_init(void)
if (of_have_populated_dt()) if (of_have_populated_dt())
return 0; return 0;
pxa2xx_set_dmac_info(32); pxa2xx_set_dmac_info(32, 100);
ret = platform_add_devices(devices, ARRAY_SIZE(devices)); ret = platform_add_devices(devices, ARRAY_SIZE(devices));
if (ret) if (ret)
return ret; return ret;
......
...@@ -201,7 +201,7 @@ static void __init spitz_scoop_init(void) ...@@ -201,7 +201,7 @@ static void __init spitz_scoop_init(void)
} }
/* Power control is shared with between one of the CF slots and SD */ /* Power control is shared with between one of the CF slots and SD */
static void spitz_card_pwr_ctrl(uint8_t enable, uint8_t new_cpr) static void __maybe_unused spitz_card_pwr_ctrl(uint8_t enable, uint8_t new_cpr)
{ {
unsigned short cpr; unsigned short cpr;
unsigned long flags; unsigned long flags;
......
...@@ -910,7 +910,7 @@ static void __init zeus_map_io(void) ...@@ -910,7 +910,7 @@ static void __init zeus_map_io(void)
PMCR = PSPR = 0; PMCR = PSPR = 0;
/* enable internal 32.768Khz oscillator (ignore OSCC_OOK) */ /* enable internal 32.768Khz oscillator (ignore OSCC_OOK) */
OSCC |= OSCC_OON; writel(readl(OSCC) | OSCC_OON, OSCC);
/* Some clock cycles later (from OSCC_ON), programme PCFR (OPDE...). /* Some clock cycles later (from OSCC_ON), programme PCFR (OPDE...).
* float chip selects and PCMCIA */ * float chip selects and PCMCIA */
......
...@@ -95,6 +95,6 @@ static inline int pxad_toggle_reserved_channel(int legacy_channel) ...@@ -95,6 +95,6 @@ static inline int pxad_toggle_reserved_channel(int legacy_channel)
} }
#endif #endif
extern void __init pxa2xx_set_dmac_info(int nb_channels); extern void __init pxa2xx_set_dmac_info(int nb_channels, int nb_requestors);
#endif /* __PLAT_DMA_H */ #endif /* __PLAT_DMA_H */
...@@ -84,7 +84,7 @@ unsigned int pxa25x_get_clk_frequency_khz(int info) ...@@ -84,7 +84,7 @@ unsigned int pxa25x_get_clk_frequency_khz(int info)
static unsigned long clk_pxa25x_memory_get_rate(struct clk_hw *hw, static unsigned long clk_pxa25x_memory_get_rate(struct clk_hw *hw,
unsigned long parent_rate) unsigned long parent_rate)
{ {
unsigned long cccr = CCCR; unsigned long cccr = readl(CCCR);
unsigned int m = M_clk_mult[(cccr >> 5) & 0x03]; unsigned int m = M_clk_mult[(cccr >> 5) & 0x03];
return parent_rate / m; return parent_rate / m;
...@@ -99,7 +99,7 @@ PARENTS(pxa25x_osc3) = { "osc_3_6864mhz", "osc_3_6864mhz" }; ...@@ -99,7 +99,7 @@ PARENTS(pxa25x_osc3) = { "osc_3_6864mhz", "osc_3_6864mhz" };
#define PXA25X_CKEN(dev_id, con_id, parents, mult, div, \ #define PXA25X_CKEN(dev_id, con_id, parents, mult, div, \
bit, is_lp, flags) \ bit, is_lp, flags) \
PXA_CKEN(dev_id, con_id, bit, parents, mult, div, mult, div, \ PXA_CKEN(dev_id, con_id, bit, parents, mult, div, mult, div, \
is_lp, &CKEN, CKEN_ ## bit, flags) is_lp, CKEN, CKEN_ ## bit, flags)
#define PXA25X_PBUS95_CKEN(dev_id, con_id, bit, mult_hp, div_hp, delay) \ #define PXA25X_PBUS95_CKEN(dev_id, con_id, bit, mult_hp, div_hp, delay) \
PXA25X_CKEN(dev_id, con_id, pxa25x_pbus95_parents, mult_hp, \ PXA25X_CKEN(dev_id, con_id, pxa25x_pbus95_parents, mult_hp, \
div_hp, bit, NULL, 0) div_hp, bit, NULL, 0)
...@@ -112,10 +112,10 @@ PARENTS(pxa25x_osc3) = { "osc_3_6864mhz", "osc_3_6864mhz" }; ...@@ -112,10 +112,10 @@ PARENTS(pxa25x_osc3) = { "osc_3_6864mhz", "osc_3_6864mhz" };
#define PXA25X_CKEN_1RATE(dev_id, con_id, bit, parents, delay) \ #define PXA25X_CKEN_1RATE(dev_id, con_id, bit, parents, delay) \
PXA_CKEN_1RATE(dev_id, con_id, bit, parents, \ PXA_CKEN_1RATE(dev_id, con_id, bit, parents, \
&CKEN, CKEN_ ## bit, 0) CKEN, CKEN_ ## bit, 0)
#define PXA25X_CKEN_1RATE_AO(dev_id, con_id, bit, parents, delay) \ #define PXA25X_CKEN_1RATE_AO(dev_id, con_id, bit, parents, delay) \
PXA_CKEN_1RATE(dev_id, con_id, bit, parents, \ PXA_CKEN_1RATE(dev_id, con_id, bit, parents, \
&CKEN, CKEN_ ## bit, CLK_IGNORE_UNUSED) CKEN, CKEN_ ## bit, CLK_IGNORE_UNUSED)
static struct desc_clk_cken pxa25x_clocks[] __initdata = { static struct desc_clk_cken pxa25x_clocks[] __initdata = {
PXA25X_PBUS95_CKEN("pxa2xx-mci.0", NULL, MMC, 1, 5, 0), PXA25X_PBUS95_CKEN("pxa2xx-mci.0", NULL, MMC, 1, 5, 0),
...@@ -162,7 +162,7 @@ MUX_RO_RATE_RO_OPS(clk_pxa25x_core, "core"); ...@@ -162,7 +162,7 @@ MUX_RO_RATE_RO_OPS(clk_pxa25x_core, "core");
static unsigned long clk_pxa25x_run_get_rate(struct clk_hw *hw, static unsigned long clk_pxa25x_run_get_rate(struct clk_hw *hw,
unsigned long parent_rate) unsigned long parent_rate)
{ {
unsigned long cccr = CCCR; unsigned long cccr = readl(CCCR);
unsigned int n2 = N2_clk_mult[(cccr >> 7) & 0x07]; unsigned int n2 = N2_clk_mult[(cccr >> 7) & 0x07];
return (parent_rate / n2) * 2; return (parent_rate / n2) * 2;
...@@ -173,7 +173,7 @@ RATE_RO_OPS(clk_pxa25x_run, "run"); ...@@ -173,7 +173,7 @@ RATE_RO_OPS(clk_pxa25x_run, "run");
static unsigned long clk_pxa25x_cpll_get_rate(struct clk_hw *hw, static unsigned long clk_pxa25x_cpll_get_rate(struct clk_hw *hw,
unsigned long parent_rate) unsigned long parent_rate)
{ {
unsigned long clkcfg, cccr = CCCR; unsigned long clkcfg, cccr = readl(CCCR);
unsigned int l, m, n2, t; unsigned int l, m, n2, t;
asm("mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg)); asm("mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg));
......
...@@ -85,7 +85,7 @@ unsigned int pxa27x_get_clk_frequency_khz(int info) ...@@ -85,7 +85,7 @@ unsigned int pxa27x_get_clk_frequency_khz(int info)
bool pxa27x_is_ppll_disabled(void) bool pxa27x_is_ppll_disabled(void)
{ {
unsigned long ccsr = CCSR; unsigned long ccsr = readl(CCSR);
return ccsr & (1 << CCCR_PPDIS_BIT); return ccsr & (1 << CCCR_PPDIS_BIT);
} }
...@@ -93,7 +93,7 @@ bool pxa27x_is_ppll_disabled(void) ...@@ -93,7 +93,7 @@ bool pxa27x_is_ppll_disabled(void)
#define PXA27X_CKEN(dev_id, con_id, parents, mult_hp, div_hp, \ #define PXA27X_CKEN(dev_id, con_id, parents, mult_hp, div_hp, \
bit, is_lp, flags) \ bit, is_lp, flags) \
PXA_CKEN(dev_id, con_id, bit, parents, 1, 1, mult_hp, div_hp, \ PXA_CKEN(dev_id, con_id, bit, parents, 1, 1, mult_hp, div_hp, \
is_lp, &CKEN, CKEN_ ## bit, flags) is_lp, CKEN, CKEN_ ## bit, flags)
#define PXA27X_PBUS_CKEN(dev_id, con_id, bit, mult_hp, div_hp, delay) \ #define PXA27X_PBUS_CKEN(dev_id, con_id, bit, mult_hp, div_hp, delay) \
PXA27X_CKEN(dev_id, con_id, pxa27x_pbus_parents, mult_hp, \ PXA27X_CKEN(dev_id, con_id, pxa27x_pbus_parents, mult_hp, \
div_hp, bit, pxa27x_is_ppll_disabled, 0) div_hp, bit, pxa27x_is_ppll_disabled, 0)
...@@ -106,10 +106,10 @@ PARENTS(pxa27x_membus) = { "lcd_base", "lcd_base" }; ...@@ -106,10 +106,10 @@ PARENTS(pxa27x_membus) = { "lcd_base", "lcd_base" };
#define PXA27X_CKEN_1RATE(dev_id, con_id, bit, parents, delay) \ #define PXA27X_CKEN_1RATE(dev_id, con_id, bit, parents, delay) \
PXA_CKEN_1RATE(dev_id, con_id, bit, parents, \ PXA_CKEN_1RATE(dev_id, con_id, bit, parents, \
&CKEN, CKEN_ ## bit, 0) CKEN, CKEN_ ## bit, 0)
#define PXA27X_CKEN_1RATE_AO(dev_id, con_id, bit, parents, delay) \ #define PXA27X_CKEN_1RATE_AO(dev_id, con_id, bit, parents, delay) \
PXA_CKEN_1RATE(dev_id, con_id, bit, parents, \ PXA_CKEN_1RATE(dev_id, con_id, bit, parents, \
&CKEN, CKEN_ ## bit, CLK_IGNORE_UNUSED) CKEN, CKEN_ ## bit, CLK_IGNORE_UNUSED)
static struct desc_clk_cken pxa27x_clocks[] __initdata = { static struct desc_clk_cken pxa27x_clocks[] __initdata = {
PXA27X_PBUS_CKEN("pxa2xx-uart.0", NULL, FFUART, 2, 42, 1), PXA27X_PBUS_CKEN("pxa2xx-uart.0", NULL, FFUART, 2, 42, 1),
...@@ -151,7 +151,7 @@ static unsigned long clk_pxa27x_cpll_get_rate(struct clk_hw *hw, ...@@ -151,7 +151,7 @@ static unsigned long clk_pxa27x_cpll_get_rate(struct clk_hw *hw,
unsigned long clkcfg; unsigned long clkcfg;
unsigned int t, ht; unsigned int t, ht;
unsigned int l, L, n2, N; unsigned int l, L, n2, N;
unsigned long ccsr = CCSR; unsigned long ccsr = readl(CCSR);
asm("mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg)); asm("mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg));
t = clkcfg & (1 << 0); t = clkcfg & (1 << 0);
...@@ -171,8 +171,8 @@ static unsigned long clk_pxa27x_lcd_base_get_rate(struct clk_hw *hw, ...@@ -171,8 +171,8 @@ static unsigned long clk_pxa27x_lcd_base_get_rate(struct clk_hw *hw,
unsigned long parent_rate) unsigned long parent_rate)
{ {
unsigned int l, osc_forced; unsigned int l, osc_forced;
unsigned long ccsr = CCSR; unsigned long ccsr = readl(CCSR);
unsigned long cccr = CCCR; unsigned long cccr = readl(CCCR);
l = ccsr & CCSR_L_MASK; l = ccsr & CCSR_L_MASK;
osc_forced = ccsr & (1 << CCCR_CPDIS_BIT); osc_forced = ccsr & (1 << CCCR_CPDIS_BIT);
...@@ -193,7 +193,7 @@ static unsigned long clk_pxa27x_lcd_base_get_rate(struct clk_hw *hw, ...@@ -193,7 +193,7 @@ static unsigned long clk_pxa27x_lcd_base_get_rate(struct clk_hw *hw,
static u8 clk_pxa27x_lcd_base_get_parent(struct clk_hw *hw) static u8 clk_pxa27x_lcd_base_get_parent(struct clk_hw *hw)
{ {
unsigned int osc_forced; unsigned int osc_forced;
unsigned long ccsr = CCSR; unsigned long ccsr = readl(CCSR);
osc_forced = ccsr & (1 << CCCR_CPDIS_BIT); osc_forced = ccsr & (1 << CCCR_CPDIS_BIT);
if (osc_forced) if (osc_forced)
...@@ -222,7 +222,7 @@ static unsigned long clk_pxa27x_core_get_rate(struct clk_hw *hw, ...@@ -222,7 +222,7 @@ static unsigned long clk_pxa27x_core_get_rate(struct clk_hw *hw,
{ {
unsigned long clkcfg; unsigned long clkcfg;
unsigned int t, ht, b, osc_forced; unsigned int t, ht, b, osc_forced;
unsigned long ccsr = CCSR; unsigned long ccsr = readl(CCSR);
osc_forced = ccsr & (1 << CCCR_CPDIS_BIT); osc_forced = ccsr & (1 << CCCR_CPDIS_BIT);
asm("mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg)); asm("mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg));
...@@ -242,7 +242,7 @@ static u8 clk_pxa27x_core_get_parent(struct clk_hw *hw) ...@@ -242,7 +242,7 @@ static u8 clk_pxa27x_core_get_parent(struct clk_hw *hw)
{ {
unsigned long clkcfg; unsigned long clkcfg;
unsigned int t, ht, b, osc_forced; unsigned int t, ht, b, osc_forced;
unsigned long ccsr = CCSR; unsigned long ccsr = readl(CCSR);
osc_forced = ccsr & (1 << CCCR_CPDIS_BIT); osc_forced = ccsr & (1 << CCCR_CPDIS_BIT);
if (osc_forced) if (osc_forced)
...@@ -263,7 +263,7 @@ MUX_RO_RATE_RO_OPS(clk_pxa27x_core, "core"); ...@@ -263,7 +263,7 @@ MUX_RO_RATE_RO_OPS(clk_pxa27x_core, "core");
static unsigned long clk_pxa27x_run_get_rate(struct clk_hw *hw, static unsigned long clk_pxa27x_run_get_rate(struct clk_hw *hw,
unsigned long parent_rate) unsigned long parent_rate)
{ {
unsigned long ccsr = CCSR; unsigned long ccsr = readl(CCSR);
unsigned int n2 = (ccsr & CCSR_N2_MASK) >> CCSR_N2_SHIFT; unsigned int n2 = (ccsr & CCSR_N2_MASK) >> CCSR_N2_SHIFT;
return (parent_rate / n2) * 2; return (parent_rate / n2) * 2;
...@@ -285,7 +285,7 @@ static unsigned long clk_pxa27x_system_bus_get_rate(struct clk_hw *hw, ...@@ -285,7 +285,7 @@ static unsigned long clk_pxa27x_system_bus_get_rate(struct clk_hw *hw,
{ {
unsigned long clkcfg; unsigned long clkcfg;
unsigned int b, osc_forced; unsigned int b, osc_forced;
unsigned long ccsr = CCSR; unsigned long ccsr = readl(CCSR);
osc_forced = ccsr & (1 << CCCR_CPDIS_BIT); osc_forced = ccsr & (1 << CCCR_CPDIS_BIT);
asm("mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg)); asm("mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg));
...@@ -302,7 +302,7 @@ static unsigned long clk_pxa27x_system_bus_get_rate(struct clk_hw *hw, ...@@ -302,7 +302,7 @@ static unsigned long clk_pxa27x_system_bus_get_rate(struct clk_hw *hw,
static u8 clk_pxa27x_system_bus_get_parent(struct clk_hw *hw) static u8 clk_pxa27x_system_bus_get_parent(struct clk_hw *hw)
{ {
unsigned int osc_forced; unsigned int osc_forced;
unsigned long ccsr = CCSR; unsigned long ccsr = readl(CCSR);
osc_forced = ccsr & (1 << CCCR_CPDIS_BIT); osc_forced = ccsr & (1 << CCCR_CPDIS_BIT);
if (osc_forced) if (osc_forced)
...@@ -318,8 +318,8 @@ static unsigned long clk_pxa27x_memory_get_rate(struct clk_hw *hw, ...@@ -318,8 +318,8 @@ static unsigned long clk_pxa27x_memory_get_rate(struct clk_hw *hw,
unsigned long parent_rate) unsigned long parent_rate)
{ {
unsigned int a, l, osc_forced; unsigned int a, l, osc_forced;
unsigned long cccr = CCCR; unsigned long cccr = readl(CCCR);
unsigned long ccsr = CCSR; unsigned long ccsr = readl(CCSR);
osc_forced = ccsr & (1 << CCCR_CPDIS_BIT); osc_forced = ccsr & (1 << CCCR_CPDIS_BIT);
a = cccr & (1 << CCCR_A_BIT); a = cccr & (1 << CCCR_A_BIT);
...@@ -337,8 +337,8 @@ static unsigned long clk_pxa27x_memory_get_rate(struct clk_hw *hw, ...@@ -337,8 +337,8 @@ static unsigned long clk_pxa27x_memory_get_rate(struct clk_hw *hw,
static u8 clk_pxa27x_memory_get_parent(struct clk_hw *hw) static u8 clk_pxa27x_memory_get_parent(struct clk_hw *hw)
{ {
unsigned int osc_forced, a; unsigned int osc_forced, a;
unsigned long cccr = CCCR; unsigned long cccr = readl(CCCR);
unsigned long ccsr = CCSR; unsigned long ccsr = readl(CCSR);
osc_forced = ccsr & (1 << CCCR_CPDIS_BIT); osc_forced = ccsr & (1 << CCCR_CPDIS_BIT);
a = cccr & (1 << CCCR_A_BIT); a = cccr & (1 << CCCR_A_BIT);
......
...@@ -334,8 +334,7 @@ static void __init pxa3xx_base_clocks_init(void) ...@@ -334,8 +334,7 @@ static void __init pxa3xx_base_clocks_init(void)
clk_register_clk_pxa3xx_system_bus(); clk_register_clk_pxa3xx_system_bus();
clk_register_clk_pxa3xx_ac97(); clk_register_clk_pxa3xx_ac97();
clk_register_clk_pxa3xx_smemc(); clk_register_clk_pxa3xx_smemc();
clk_register_gate(NULL, "CLK_POUT", "osc_13mhz", 0, clk_register_gate(NULL, "CLK_POUT", "osc_13mhz", 0, OSCC, 11, 0, NULL);
(void __iomem *)&OSCC, 11, 0, NULL);
clkdev_pxa_register(CLK_OSTIMER, "OSTIMER0", NULL, clkdev_pxa_register(CLK_OSTIMER, "OSTIMER0", NULL,
clk_register_fixed_factor(NULL, "os-timer0", clk_register_fixed_factor(NULL, "os-timer0",
"osc_13mhz", 0, 1, 4)); "osc_13mhz", 0, 1, 4));
......
...@@ -319,7 +319,7 @@ static int pxa_set_target(struct cpufreq_policy *policy, unsigned int idx) ...@@ -319,7 +319,7 @@ static int pxa_set_target(struct cpufreq_policy *policy, unsigned int idx)
local_irq_save(flags); local_irq_save(flags);
/* Set new the CCCR and prepare CCLKCFG */ /* Set new the CCCR and prepare CCLKCFG */
CCCR = pxa_freq_settings[idx].cccr; writel(pxa_freq_settings[idx].cccr, CCCR);
cclkcfg = pxa_freq_settings[idx].cclkcfg; cclkcfg = pxa_freq_settings[idx].cclkcfg;
asm volatile(" \n\ asm volatile(" \n\
......
...@@ -122,6 +122,7 @@ struct pxad_chan { ...@@ -122,6 +122,7 @@ struct pxad_chan {
struct pxad_device { struct pxad_device {
struct dma_device slave; struct dma_device slave;
int nr_chans; int nr_chans;
int nr_requestors;
void __iomem *base; void __iomem *base;
struct pxad_phy *phys; struct pxad_phy *phys;
spinlock_t phy_lock; /* Phy association */ spinlock_t phy_lock; /* Phy association */
...@@ -473,7 +474,7 @@ static void pxad_free_phy(struct pxad_chan *chan) ...@@ -473,7 +474,7 @@ static void pxad_free_phy(struct pxad_chan *chan)
return; return;
/* clear the channel mapping in DRCMR */ /* clear the channel mapping in DRCMR */
if (chan->drcmr <= DRCMR_CHLNUM) { if (chan->drcmr <= pdev->nr_requestors) {
reg = pxad_drcmr(chan->drcmr); reg = pxad_drcmr(chan->drcmr);
writel_relaxed(0, chan->phy->base + reg); writel_relaxed(0, chan->phy->base + reg);
} }
...@@ -509,6 +510,7 @@ static bool is_running_chan_misaligned(struct pxad_chan *chan) ...@@ -509,6 +510,7 @@ static bool is_running_chan_misaligned(struct pxad_chan *chan)
static void phy_enable(struct pxad_phy *phy, bool misaligned) static void phy_enable(struct pxad_phy *phy, bool misaligned)
{ {
struct pxad_device *pdev;
u32 reg, dalgn; u32 reg, dalgn;
if (!phy->vchan) if (!phy->vchan)
...@@ -518,7 +520,8 @@ static void phy_enable(struct pxad_phy *phy, bool misaligned) ...@@ -518,7 +520,8 @@ static void phy_enable(struct pxad_phy *phy, bool misaligned)
"%s(); phy=%p(%d) misaligned=%d\n", __func__, "%s(); phy=%p(%d) misaligned=%d\n", __func__,
phy, phy->idx, misaligned); 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); reg = pxad_drcmr(phy->vchan->drcmr);
writel_relaxed(DRCMR_MAPVLD | phy->idx, phy->base + reg); writel_relaxed(DRCMR_MAPVLD | phy->idx, phy->base + reg);
} }
...@@ -908,6 +911,7 @@ static void pxad_get_config(struct pxad_chan *chan, ...@@ -908,6 +911,7 @@ static void pxad_get_config(struct pxad_chan *chan,
{ {
u32 maxburst = 0, dev_addr = 0; u32 maxburst = 0, dev_addr = 0;
enum dma_slave_buswidth width = DMA_SLAVE_BUSWIDTH_UNDEFINED; enum dma_slave_buswidth width = DMA_SLAVE_BUSWIDTH_UNDEFINED;
struct pxad_device *pdev = to_pxad_dev(chan->vc.chan.device);
*dcmd = 0; *dcmd = 0;
if (dir == DMA_DEV_TO_MEM) { if (dir == DMA_DEV_TO_MEM) {
...@@ -916,7 +920,7 @@ static void pxad_get_config(struct pxad_chan *chan, ...@@ -916,7 +920,7 @@ static void pxad_get_config(struct pxad_chan *chan,
dev_addr = chan->cfg.src_addr; dev_addr = chan->cfg.src_addr;
*dev_src = dev_addr; *dev_src = dev_addr;
*dcmd |= PXA_DCMD_INCTRGADDR; *dcmd |= PXA_DCMD_INCTRGADDR;
if (chan->drcmr <= DRCMR_CHLNUM) if (chan->drcmr <= pdev->nr_requestors)
*dcmd |= PXA_DCMD_FLOWSRC; *dcmd |= PXA_DCMD_FLOWSRC;
} }
if (dir == DMA_MEM_TO_DEV) { if (dir == DMA_MEM_TO_DEV) {
...@@ -925,7 +929,7 @@ static void pxad_get_config(struct pxad_chan *chan, ...@@ -925,7 +929,7 @@ static void pxad_get_config(struct pxad_chan *chan,
dev_addr = chan->cfg.dst_addr; dev_addr = chan->cfg.dst_addr;
*dev_dst = dev_addr; *dev_dst = dev_addr;
*dcmd |= PXA_DCMD_INCSRCADDR; *dcmd |= PXA_DCMD_INCSRCADDR;
if (chan->drcmr <= DRCMR_CHLNUM) if (chan->drcmr <= pdev->nr_requestors)
*dcmd |= PXA_DCMD_FLOWTRG; *dcmd |= PXA_DCMD_FLOWTRG;
} }
if (dir == DMA_MEM_TO_MEM) if (dir == DMA_MEM_TO_MEM)
...@@ -1335,13 +1339,15 @@ static struct dma_chan *pxad_dma_xlate(struct of_phandle_args *dma_spec, ...@@ -1335,13 +1339,15 @@ static struct dma_chan *pxad_dma_xlate(struct of_phandle_args *dma_spec,
static int pxad_init_dmadev(struct platform_device *op, static int pxad_init_dmadev(struct platform_device *op,
struct pxad_device *pdev, struct pxad_device *pdev,
unsigned int nr_phy_chans) unsigned int nr_phy_chans,
unsigned int nr_requestors)
{ {
int ret; int ret;
unsigned int i; unsigned int i;
struct pxad_chan *c; struct pxad_chan *c;
pdev->nr_chans = nr_phy_chans; pdev->nr_chans = nr_phy_chans;
pdev->nr_requestors = nr_requestors;
INIT_LIST_HEAD(&pdev->slave.channels); INIT_LIST_HEAD(&pdev->slave.channels);
pdev->slave.device_alloc_chan_resources = pxad_alloc_chan_resources; pdev->slave.device_alloc_chan_resources = pxad_alloc_chan_resources;
pdev->slave.device_free_chan_resources = pxad_free_chan_resources; pdev->slave.device_free_chan_resources = pxad_free_chan_resources;
...@@ -1376,7 +1382,7 @@ static int pxad_probe(struct platform_device *op) ...@@ -1376,7 +1382,7 @@ static int pxad_probe(struct platform_device *op)
const struct of_device_id *of_id; const struct of_device_id *of_id;
struct mmp_dma_platdata *pdata = dev_get_platdata(&op->dev); struct mmp_dma_platdata *pdata = dev_get_platdata(&op->dev);
struct resource *iores; struct resource *iores;
int ret, dma_channels = 0; int ret, dma_channels = 0, nb_requestors = 0;
const enum dma_slave_buswidth widths = const enum dma_slave_buswidth widths =
DMA_SLAVE_BUSWIDTH_1_BYTE | DMA_SLAVE_BUSWIDTH_2_BYTES | DMA_SLAVE_BUSWIDTH_1_BYTE | DMA_SLAVE_BUSWIDTH_2_BYTES |
DMA_SLAVE_BUSWIDTH_4_BYTES; DMA_SLAVE_BUSWIDTH_4_BYTES;
...@@ -1393,13 +1399,23 @@ static int pxad_probe(struct platform_device *op) ...@@ -1393,13 +1399,23 @@ static int pxad_probe(struct platform_device *op)
return PTR_ERR(pdev->base); return PTR_ERR(pdev->base);
of_id = of_match_device(pxad_dt_ids, &op->dev); 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", of_property_read_u32(op->dev.of_node, "#dma-channels",
&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; dma_channels = pdata->dma_channels;
else nb_requestors = pdata->nb_requestors;
} else {
dma_channels = 32; /* default 32 channel */ dma_channels = 32; /* default 32 channel */
}
dma_cap_set(DMA_SLAVE, pdev->slave.cap_mask); dma_cap_set(DMA_SLAVE, pdev->slave.cap_mask);
dma_cap_set(DMA_MEMCPY, pdev->slave.cap_mask); dma_cap_set(DMA_MEMCPY, pdev->slave.cap_mask);
...@@ -1417,7 +1433,7 @@ static int pxad_probe(struct platform_device *op) ...@@ -1417,7 +1433,7 @@ static int pxad_probe(struct platform_device *op)
pdev->slave.descriptor_reuse = true; pdev->slave.descriptor_reuse = true;
pdev->slave.dev = &op->dev; 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) { if (ret) {
dev_err(pdev->slave.dev, "unable to register\n"); dev_err(pdev->slave.dev, "unable to register\n");
return ret; return ret;
...@@ -1436,7 +1452,8 @@ static int pxad_probe(struct platform_device *op) ...@@ -1436,7 +1452,8 @@ static int pxad_probe(struct platform_device *op)
platform_set_drvdata(op, pdev); platform_set_drvdata(op, pdev);
pxad_init_debugfs(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; return 0;
} }
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
struct mmp_dma_platdata { struct mmp_dma_platdata {
int dma_channels; int dma_channels;
int nb_requestors;
}; };
#endif /* MMP_DMA_H */ #endif /* MMP_DMA_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment