mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 13:22:23 +00:00
Memory controller drivers for v5.9, part 2
1. Minor cleanups and fixes of multiple memory controller drivers, mostly around code quality and readability, 2. Add Git repository to drivers/memory entry in MAINTAINERS, 3. Allow MIPS jz4780 FUSE driver to probe by removing conflicting memory region with jz4780_nemc. -----BEGIN PGP SIGNATURE----- iQJEBAABCgAuFiEE3dJiKD0RGyM7briowTdm5oaLg9cFAl8hd/EQHGtyemtAa2Vy bmVsLm9yZwAKCRDBN2bmhouD17RRD/9jAY9rApoHey4kygSTLrLll7aSknTNBXSs 012L8K3VZIO0am6suTQilpHudM1GxAr8To7NxFb5XwGXafWHuzAHiq7C2cmluchK Ob+RR/WvjZU75rhRtA5UfNZepAI1G/4swZ972Su/iF2XugdN2Oxlke9m4xQZhoeS humflQRMZiAPOS+FrDQd4mT7YTCD6UNZWeyJ8ifeYQja/1WyCELa6qJfDEnQXdO1 FjBsjV/8i0tNSr85yu7rIE/DnOhRSorrrWcWsBT4yxFx5znLBK9gI3eIGpJU5WvL /1ZM4WoBZkkouLLpPSuUXg1Uczj6q6EEWcGqfldIqsJJIBsD79hEWbcIYyb+t3L6 QFSoZxpRLE0w8A1oXKDfUbTifVbM/ySsmXWxvtpQSLReDL3snRileMGfiS5yHhOe LL0Gj5IY3NzQIhlUm5kBPlg5bJK733478F4zk8tFN3EC2sJcQFOn1FSy3NhS1JSq AMbKXk6tfIEUOYCksdbdC78qLYvZG47Jfpfx8WvgcaSWJl3Blp1o4RkDEdfBpd+V 54x2plV60FCy0vGvZGWifdeAxRszvWZTaklYPWFOBhtmxSosJ+p0wLBP4pGO7ENa p6buuyLWBZxUJFAThAj4hbgQmAZ0wGl3QrTsgQudmtEQoWGSN/+VlhBm1+9LP5Ry rEkp6NzPFg== =qGyp -----END PGP SIGNATURE----- Merge tag 'memory-controller-drv-5.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl into arm/drivers Memory controller drivers for v5.9, part 2 1. Minor cleanups and fixes of multiple memory controller drivers, mostly around code quality and readability, 2. Add Git repository to drivers/memory entry in MAINTAINERS, 3. Allow MIPS jz4780 FUSE driver to probe by removing conflicting memory region with jz4780_nemc. * tag 'memory-controller-drv-5.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl: memory: jz4780_nemc: Only request IO memory the driver will use MAINTAINERS: Add Git repository for memory controller drivers memory: brcmstb_dpfe: Fix language typo memory: samsung: exynos5422-dmc: Correct white space issues memory: samsung: exynos-srom: Correct alignment memory: pl172: Enclose macro argument usage in parenthesis memory: of: Correct kerneldoc memory: omap-gpmc: Fix language typo memory: omap-gpmc: Correct white space issues memory: omap-gpmc: Use 'unsigned int' for consistency memory: omap-gpmc: Enclose macro argument usage in parenthesis memory: omap-gpmc: Correct kerneldoc memory: mvebu-devbus: Align with open parenthesis memory: mvebu-devbus: Add missing braces to all arms of if statement memory: bt1-l2-ctl: Add blank lines after declarations Link: https://lore.kernel.org/r/20200729163008.5820-1-krzk@kernel.org Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
d7c6dbc02e
@ -11089,6 +11089,7 @@ MEMORY CONTROLLER DRIVERS
|
||||
M: Krzysztof Kozlowski <krzk@kernel.org>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl.git
|
||||
F: Documentation/devicetree/bindings/memory-controllers/
|
||||
F: drivers/memory/
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
* - BE kernel + LE firmware image
|
||||
* - BE kernel + BE firmware image
|
||||
*
|
||||
* The DPCU always runs in big endian mode. The firwmare image, however, can
|
||||
* The DPCU always runs in big endian mode. The firmware image, however, can
|
||||
* be in either format. Also, communication between host CPU and DCPU is
|
||||
* always in little endian.
|
||||
*/
|
||||
|
@ -66,6 +66,7 @@ struct l2_ctl_device_attribute {
|
||||
struct device_attribute dev_attr;
|
||||
enum l2_ctl_stall id;
|
||||
};
|
||||
|
||||
#define to_l2_ctl_dev_attr(_dev_attr) \
|
||||
container_of(_dev_attr, struct l2_ctl_device_attribute, dev_attr)
|
||||
|
||||
@ -242,6 +243,7 @@ static ssize_t l2_ctl_latency_store(struct device *dev,
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static L2_CTL_ATTR_RW(l2_ws_latency, l2_ctl_latency, L2_WS_STALL);
|
||||
static L2_CTL_ATTR_RW(l2_tag_latency, l2_ctl_latency, L2_TAG_STALL);
|
||||
static L2_CTL_ATTR_RW(l2_data_latency, l2_ctl_latency, L2_DATA_STALL);
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/math64.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
@ -22,6 +23,8 @@
|
||||
#define NEMC_SMCRn(n) (0x14 + (((n) - 1) * 4))
|
||||
#define NEMC_NFCSR 0x50
|
||||
|
||||
#define NEMC_REG_LEN 0x54
|
||||
|
||||
#define NEMC_SMCR_SMT BIT(0)
|
||||
#define NEMC_SMCR_BW_SHIFT 6
|
||||
#define NEMC_SMCR_BW_MASK (0x3 << NEMC_SMCR_BW_SHIFT)
|
||||
@ -288,7 +291,19 @@ static int jz4780_nemc_probe(struct platform_device *pdev)
|
||||
nemc->dev = dev;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
nemc->base = devm_ioremap_resource(dev, res);
|
||||
|
||||
/*
|
||||
* The driver currently only uses the registers up to offset
|
||||
* NEMC_REG_LEN. Since the EFUSE registers are in the middle of the
|
||||
* NEMC registers, we only request the registers we will use for now;
|
||||
* that way the EFUSE driver can probe too.
|
||||
*/
|
||||
if (!devm_request_mem_region(dev, res->start, NEMC_REG_LEN, dev_name(dev))) {
|
||||
dev_err(dev, "unable to request I/O memory region\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
nemc->base = devm_ioremap(dev, res->start, NEMC_REG_LEN);
|
||||
if (IS_ERR(nemc->base)) {
|
||||
dev_err(dev, "failed to get I/O memory\n");
|
||||
return PTR_ERR(nemc->base);
|
||||
|
@ -124,32 +124,32 @@ static int devbus_get_timing_params(struct devbus *devbus,
|
||||
* The bus width is encoded into the register as 0 for 8 bits,
|
||||
* and 1 for 16 bits, so we do the necessary conversion here.
|
||||
*/
|
||||
if (r->bus_width == 8)
|
||||
if (r->bus_width == 8) {
|
||||
r->bus_width = 0;
|
||||
else if (r->bus_width == 16)
|
||||
} else if (r->bus_width == 16) {
|
||||
r->bus_width = 1;
|
||||
else {
|
||||
} else {
|
||||
dev_err(devbus->dev, "invalid bus width %d\n", r->bus_width);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
err = get_timing_param_ps(devbus, node, "devbus,badr-skew-ps",
|
||||
&r->badr_skew);
|
||||
&r->badr_skew);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
err = get_timing_param_ps(devbus, node, "devbus,turn-off-ps",
|
||||
&r->turn_off);
|
||||
&r->turn_off);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
err = get_timing_param_ps(devbus, node, "devbus,acc-first-ps",
|
||||
&r->acc_first);
|
||||
&r->acc_first);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
err = get_timing_param_ps(devbus, node, "devbus,acc-next-ps",
|
||||
&r->acc_next);
|
||||
&r->acc_next);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
@ -175,17 +175,17 @@ static int devbus_get_timing_params(struct devbus *devbus,
|
||||
}
|
||||
|
||||
err = get_timing_param_ps(devbus, node, "devbus,ale-wr-ps",
|
||||
&w->ale_wr);
|
||||
&w->ale_wr);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
err = get_timing_param_ps(devbus, node, "devbus,wr-low-ps",
|
||||
&w->wr_low);
|
||||
&w->wr_low);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
err = get_timing_param_ps(devbus, node, "devbus,wr-high-ps",
|
||||
&w->wr_high);
|
||||
&w->wr_high);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
/**
|
||||
* of_get_min_tck() - extract min timing values for ddr
|
||||
* @np: pointer to ddr device tree node
|
||||
* @device: device requesting for min timing values
|
||||
* @dev: device requesting for min timing values
|
||||
*
|
||||
* Populates the lpddr2_min_tck structure by extracting data
|
||||
* from device tree node. Returns a pointer to the populated
|
||||
@ -155,7 +155,7 @@ EXPORT_SYMBOL(of_get_ddr_timings);
|
||||
/**
|
||||
* of_lpddr3_get_min_tck() - extract min timing values for lpddr3
|
||||
* @np: pointer to ddr device tree node
|
||||
* @device: device requesting for min timing values
|
||||
* @dev: device requesting for min timing values
|
||||
*
|
||||
* Populates the lpddr3_min_tck structure by extracting data
|
||||
* from device tree node. Returns a pointer to the populated
|
||||
|
@ -109,8 +109,8 @@
|
||||
#define ENABLE_PREFETCH (0x1 << 7)
|
||||
#define DMA_MPU_MODE 2
|
||||
|
||||
#define GPMC_REVISION_MAJOR(l) ((l >> 4) & 0xf)
|
||||
#define GPMC_REVISION_MINOR(l) (l & 0xf)
|
||||
#define GPMC_REVISION_MAJOR(l) (((l) >> 4) & 0xf)
|
||||
#define GPMC_REVISION_MINOR(l) ((l) & 0xf)
|
||||
|
||||
#define GPMC_HAS_WR_ACCESS 0x1
|
||||
#define GPMC_HAS_WR_DATA_MUX_BUS 0x2
|
||||
@ -141,27 +141,27 @@
|
||||
#define GPMC_CONFIG1_WRITEMULTIPLE_SUPP (1 << 28)
|
||||
#define GPMC_CONFIG1_WRITETYPE_ASYNC (0 << 27)
|
||||
#define GPMC_CONFIG1_WRITETYPE_SYNC (1 << 27)
|
||||
#define GPMC_CONFIG1_CLKACTIVATIONTIME(val) ((val & 3) << 25)
|
||||
#define GPMC_CONFIG1_CLKACTIVATIONTIME(val) (((val) & 3) << 25)
|
||||
/** CLKACTIVATIONTIME Max Ticks */
|
||||
#define GPMC_CONFIG1_CLKACTIVATIONTIME_MAX 2
|
||||
#define GPMC_CONFIG1_PAGE_LEN(val) ((val & 3) << 23)
|
||||
#define GPMC_CONFIG1_PAGE_LEN(val) (((val) & 3) << 23)
|
||||
/** ATTACHEDDEVICEPAGELENGTH Max Value */
|
||||
#define GPMC_CONFIG1_ATTACHEDDEVICEPAGELENGTH_MAX 2
|
||||
#define GPMC_CONFIG1_WAIT_READ_MON (1 << 22)
|
||||
#define GPMC_CONFIG1_WAIT_WRITE_MON (1 << 21)
|
||||
#define GPMC_CONFIG1_WAIT_MON_TIME(val) ((val & 3) << 18)
|
||||
#define GPMC_CONFIG1_WAIT_MON_TIME(val) (((val) & 3) << 18)
|
||||
/** WAITMONITORINGTIME Max Ticks */
|
||||
#define GPMC_CONFIG1_WAITMONITORINGTIME_MAX 2
|
||||
#define GPMC_CONFIG1_WAIT_PIN_SEL(val) ((val & 3) << 16)
|
||||
#define GPMC_CONFIG1_DEVICESIZE(val) ((val & 3) << 12)
|
||||
#define GPMC_CONFIG1_WAIT_PIN_SEL(val) (((val) & 3) << 16)
|
||||
#define GPMC_CONFIG1_DEVICESIZE(val) (((val) & 3) << 12)
|
||||
#define GPMC_CONFIG1_DEVICESIZE_16 GPMC_CONFIG1_DEVICESIZE(1)
|
||||
/** DEVICESIZE Max Value */
|
||||
#define GPMC_CONFIG1_DEVICESIZE_MAX 1
|
||||
#define GPMC_CONFIG1_DEVICETYPE(val) ((val & 3) << 10)
|
||||
#define GPMC_CONFIG1_DEVICETYPE(val) (((val) & 3) << 10)
|
||||
#define GPMC_CONFIG1_DEVICETYPE_NOR GPMC_CONFIG1_DEVICETYPE(0)
|
||||
#define GPMC_CONFIG1_MUXTYPE(val) ((val & 3) << 8)
|
||||
#define GPMC_CONFIG1_MUXTYPE(val) (((val) & 3) << 8)
|
||||
#define GPMC_CONFIG1_TIME_PARA_GRAN (1 << 4)
|
||||
#define GPMC_CONFIG1_FCLK_DIV(val) (val & 3)
|
||||
#define GPMC_CONFIG1_FCLK_DIV(val) ((val) & 3)
|
||||
#define GPMC_CONFIG1_FCLK_DIV2 (GPMC_CONFIG1_FCLK_DIV(1))
|
||||
#define GPMC_CONFIG1_FCLK_DIV3 (GPMC_CONFIG1_FCLK_DIV(2))
|
||||
#define GPMC_CONFIG1_FCLK_DIV4 (GPMC_CONFIG1_FCLK_DIV(3))
|
||||
@ -246,7 +246,7 @@ static DEFINE_SPINLOCK(gpmc_mem_lock);
|
||||
static unsigned int gpmc_cs_num = GPMC_CS_NUM;
|
||||
static unsigned int gpmc_nr_waitpins;
|
||||
static resource_size_t phys_base, mem_size;
|
||||
static unsigned gpmc_capability;
|
||||
static unsigned int gpmc_capability;
|
||||
static void __iomem *gpmc_base;
|
||||
|
||||
static struct clk *gpmc_l3_clk;
|
||||
@ -292,15 +292,14 @@ static unsigned long gpmc_get_fclk_period(void)
|
||||
|
||||
/**
|
||||
* gpmc_get_clk_period - get period of selected clock domain in ps
|
||||
* @cs Chip Select Region.
|
||||
* @cd Clock Domain.
|
||||
* @cs: Chip Select Region.
|
||||
* @cd: Clock Domain.
|
||||
*
|
||||
* GPMC_CS_CONFIG1 GPMCFCLKDIVIDER for cs has to be setup
|
||||
* prior to calling this function with GPMC_CD_CLK.
|
||||
*/
|
||||
static unsigned long gpmc_get_clk_period(int cs, enum gpmc_clk_domain cd)
|
||||
{
|
||||
|
||||
unsigned long tick_ps = gpmc_get_fclk_period();
|
||||
u32 l;
|
||||
int div;
|
||||
@ -320,7 +319,6 @@ static unsigned long gpmc_get_clk_period(int cs, enum gpmc_clk_domain cd)
|
||||
}
|
||||
|
||||
return tick_ps;
|
||||
|
||||
}
|
||||
|
||||
static unsigned int gpmc_ns_to_clk_ticks(unsigned int time_ns, int cs,
|
||||
@ -412,7 +410,7 @@ static void gpmc_cs_bool_timings(int cs, const struct gpmc_bool_timings *p)
|
||||
* @reg: GPMC_CS_CONFIGn register offset.
|
||||
* @st_bit: Start Bit
|
||||
* @end_bit: End Bit. Must be >= @st_bit.
|
||||
* @ma:x Maximum parameter value (before optional @shift).
|
||||
* @max: Maximum parameter value (before optional @shift).
|
||||
* If 0, maximum is as high as @st_bit and @end_bit allow.
|
||||
* @name: DTS node name, w/o "gpmc,"
|
||||
* @cd: Clock Domain of timing parameter.
|
||||
@ -512,7 +510,7 @@ static void gpmc_cs_show_timings(int cs, const char *desc)
|
||||
GPMC_GET_RAW_BOOL(GPMC_CS_CONFIG1, 4, 4, "time-para-granularity");
|
||||
GPMC_GET_RAW(GPMC_CS_CONFIG1, 8, 9, "mux-add-data");
|
||||
GPMC_GET_RAW_SHIFT_MAX(GPMC_CS_CONFIG1, 12, 13, 1,
|
||||
GPMC_CONFIG1_DEVICESIZE_MAX, "device-width");
|
||||
GPMC_CONFIG1_DEVICESIZE_MAX, "device-width");
|
||||
GPMC_GET_RAW(GPMC_CS_CONFIG1, 16, 17, "wait-pin");
|
||||
GPMC_GET_RAW_BOOL(GPMC_CS_CONFIG1, 21, 21, "wait-on-write");
|
||||
GPMC_GET_RAW_BOOL(GPMC_CS_CONFIG1, 22, 22, "wait-on-read");
|
||||
@ -626,9 +624,8 @@ static int set_gpmc_timing_reg(int cs, int reg, int st_bit, int end_bit, int max
|
||||
|
||||
l = gpmc_cs_read_reg(cs, reg);
|
||||
#ifdef CONFIG_OMAP_GPMC_DEBUG
|
||||
pr_info(
|
||||
"GPMC CS%d: %-17s: %3d ticks, %3lu ns (was %3i ticks) %3d ns\n",
|
||||
cs, name, ticks, gpmc_get_clk_period(cs, cd) * ticks / 1000,
|
||||
pr_info("GPMC CS%d: %-17s: %3d ticks, %3lu ns (was %3i ticks) %3d ns\n",
|
||||
cs, name, ticks, gpmc_get_clk_period(cs, cd) * ticks / 1000,
|
||||
(l >> st_bit) & mask, time);
|
||||
#endif
|
||||
l &= ~(mask << st_bit);
|
||||
@ -663,7 +660,6 @@ static int set_gpmc_timing_reg(int cs, int reg, int st_bit, int end_bit, int max
|
||||
*/
|
||||
static int gpmc_calc_waitmonitoring_divider(unsigned int wait_monitoring)
|
||||
{
|
||||
|
||||
int div = gpmc_ns_to_ticks(wait_monitoring);
|
||||
|
||||
div += GPMC_CONFIG1_WAITMONITORINGTIME_MAX - 1;
|
||||
@ -675,7 +671,6 @@ static int gpmc_calc_waitmonitoring_divider(unsigned int wait_monitoring)
|
||||
div = 1;
|
||||
|
||||
return div;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -729,7 +724,6 @@ int gpmc_cs_set_timings(int cs, const struct gpmc_timings *t,
|
||||
if (!s->sync_read && !s->sync_write &&
|
||||
(s->wait_on_read || s->wait_on_write)
|
||||
) {
|
||||
|
||||
div = gpmc_calc_waitmonitoring_divider(t->wait_monitoring);
|
||||
if (div < 0) {
|
||||
pr_err("%s: waitmonitoringtime %3d ns too large for greatest gpmcfclkdivider.\n",
|
||||
@ -1088,7 +1082,7 @@ static struct gpmc_nand_ops nand_ops = {
|
||||
|
||||
/**
|
||||
* gpmc_omap_get_nand_ops - Get the GPMC NAND interface
|
||||
* @regs: the GPMC NAND register map exclusive for NAND use.
|
||||
* @reg: the GPMC NAND register map exclusive for NAND use.
|
||||
* @cs: GPMC chip select number on which the NAND sits. The
|
||||
* register map returned will be specific to this chip select.
|
||||
*
|
||||
@ -1243,7 +1237,7 @@ int gpmc_omap_onenand_set_timings(struct device *dev, int cs, int freq,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpmc_omap_onenand_set_timings);
|
||||
|
||||
int gpmc_get_client_irq(unsigned irq_config)
|
||||
int gpmc_get_client_irq(unsigned int irq_config)
|
||||
{
|
||||
if (!gpmc_irq_domain) {
|
||||
pr_warn("%s called before GPMC IRQ domain available\n",
|
||||
@ -1466,7 +1460,6 @@ static void gpmc_mem_exit(void)
|
||||
continue;
|
||||
gpmc_cs_delete_mem(cs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void gpmc_mem_init(void)
|
||||
@ -1635,17 +1628,14 @@ static int gpmc_calc_async_read_timings(struct gpmc_timings *gpmc_t,
|
||||
/* oe_on */
|
||||
temp = dev_t->t_oeasu;
|
||||
if (mux)
|
||||
temp = max_t(u32, temp,
|
||||
gpmc_t->adv_rd_off + dev_t->t_aavdh);
|
||||
temp = max_t(u32, temp, gpmc_t->adv_rd_off + dev_t->t_aavdh);
|
||||
gpmc_t->oe_on = gpmc_round_ps_to_ticks(temp);
|
||||
|
||||
/* access */
|
||||
temp = max_t(u32, dev_t->t_iaa, /* XXX: remove t_iaa in async ? */
|
||||
gpmc_t->oe_on + dev_t->t_oe);
|
||||
temp = max_t(u32, temp,
|
||||
gpmc_t->cs_on + dev_t->t_ce);
|
||||
temp = max_t(u32, temp,
|
||||
gpmc_t->adv_on + dev_t->t_aa);
|
||||
gpmc_t->oe_on + dev_t->t_oe);
|
||||
temp = max_t(u32, temp, gpmc_t->cs_on + dev_t->t_ce);
|
||||
temp = max_t(u32, temp, gpmc_t->adv_on + dev_t->t_aa);
|
||||
gpmc_t->access = gpmc_round_ps_to_ticks(temp);
|
||||
|
||||
gpmc_t->oe_off = gpmc_t->access + gpmc_ticks_to_ps(1);
|
||||
@ -2091,7 +2081,7 @@ static int gpmc_probe_generic_child(struct platform_device *pdev,
|
||||
gpmc_cs_disable_mem(cs);
|
||||
|
||||
/*
|
||||
* FIXME: gpmc_cs_request() will map the CS to an arbitary
|
||||
* FIXME: gpmc_cs_request() will map the CS to an arbitrary
|
||||
* location in the gpmc address space. When booting with
|
||||
* device-tree we want the NOR flash to be mapped to the
|
||||
* location specified in the device-tree blob. So remap the
|
||||
|
@ -21,7 +21,7 @@
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/time.h>
|
||||
|
||||
#define MPMC_STATIC_CFG(n) (0x200 + 0x20 * n)
|
||||
#define MPMC_STATIC_CFG(n) (0x200 + 0x20 * (n))
|
||||
#define MPMC_STATIC_CFG_MW_8BIT 0x0
|
||||
#define MPMC_STATIC_CFG_MW_16BIT 0x1
|
||||
#define MPMC_STATIC_CFG_MW_32BIT 0x2
|
||||
@ -31,17 +31,17 @@
|
||||
#define MPMC_STATIC_CFG_EW BIT(8)
|
||||
#define MPMC_STATIC_CFG_B BIT(19)
|
||||
#define MPMC_STATIC_CFG_P BIT(20)
|
||||
#define MPMC_STATIC_WAIT_WEN(n) (0x204 + 0x20 * n)
|
||||
#define MPMC_STATIC_WAIT_WEN(n) (0x204 + 0x20 * (n))
|
||||
#define MPMC_STATIC_WAIT_WEN_MAX 0x0f
|
||||
#define MPMC_STATIC_WAIT_OEN(n) (0x208 + 0x20 * n)
|
||||
#define MPMC_STATIC_WAIT_OEN(n) (0x208 + 0x20 * (n))
|
||||
#define MPMC_STATIC_WAIT_OEN_MAX 0x0f
|
||||
#define MPMC_STATIC_WAIT_RD(n) (0x20c + 0x20 * n)
|
||||
#define MPMC_STATIC_WAIT_RD(n) (0x20c + 0x20 * (n))
|
||||
#define MPMC_STATIC_WAIT_RD_MAX 0x1f
|
||||
#define MPMC_STATIC_WAIT_PAGE(n) (0x210 + 0x20 * n)
|
||||
#define MPMC_STATIC_WAIT_PAGE(n) (0x210 + 0x20 * (n))
|
||||
#define MPMC_STATIC_WAIT_PAGE_MAX 0x1f
|
||||
#define MPMC_STATIC_WAIT_WR(n) (0x214 + 0x20 * n)
|
||||
#define MPMC_STATIC_WAIT_WR(n) (0x214 + 0x20 * (n))
|
||||
#define MPMC_STATIC_WAIT_WR_MAX 0x1f
|
||||
#define MPMC_STATIC_WAIT_TURN(n) (0x218 + 0x20 * n)
|
||||
#define MPMC_STATIC_WAIT_TURN(n) (0x218 + 0x20 * (n))
|
||||
#define MPMC_STATIC_WAIT_TURN_MAX 0x0f
|
||||
|
||||
/* Maximum number of static chip selects */
|
||||
|
@ -47,9 +47,9 @@ struct exynos_srom {
|
||||
struct exynos_srom_reg_dump *reg_offset;
|
||||
};
|
||||
|
||||
static struct exynos_srom_reg_dump *exynos_srom_alloc_reg_dump(
|
||||
const unsigned long *rdump,
|
||||
unsigned long nr_rdump)
|
||||
static struct exynos_srom_reg_dump *
|
||||
exynos_srom_alloc_reg_dump(const unsigned long *rdump,
|
||||
unsigned long nr_rdump)
|
||||
{
|
||||
struct exynos_srom_reg_dump *rd;
|
||||
unsigned int i;
|
||||
@ -116,7 +116,7 @@ static int exynos_srom_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
srom = devm_kzalloc(&pdev->dev,
|
||||
sizeof(struct exynos_srom), GFP_KERNEL);
|
||||
sizeof(struct exynos_srom), GFP_KERNEL);
|
||||
if (!srom)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -130,7 +130,7 @@ static int exynos_srom_probe(struct platform_device *pdev)
|
||||
platform_set_drvdata(pdev, srom);
|
||||
|
||||
srom->reg_offset = exynos_srom_alloc_reg_dump(exynos_srom_offsets,
|
||||
ARRAY_SIZE(exynos_srom_offsets));
|
||||
ARRAY_SIZE(exynos_srom_offsets));
|
||||
if (!srom->reg_offset) {
|
||||
iounmap(srom->reg_base);
|
||||
return -ENOMEM;
|
||||
@ -157,16 +157,16 @@ static int exynos_srom_probe(struct platform_device *pdev)
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static void exynos_srom_save(void __iomem *base,
|
||||
struct exynos_srom_reg_dump *rd,
|
||||
unsigned int num_regs)
|
||||
struct exynos_srom_reg_dump *rd,
|
||||
unsigned int num_regs)
|
||||
{
|
||||
for (; num_regs > 0; --num_regs, ++rd)
|
||||
rd->value = readl(base + rd->offset);
|
||||
}
|
||||
|
||||
static void exynos_srom_restore(void __iomem *base,
|
||||
const struct exynos_srom_reg_dump *rd,
|
||||
unsigned int num_regs)
|
||||
const struct exynos_srom_reg_dump *rd,
|
||||
unsigned int num_regs)
|
||||
{
|
||||
for (; num_regs > 0; --num_regs, ++rd)
|
||||
writel(rd->value, base + rd->offset);
|
||||
@ -177,7 +177,7 @@ static int exynos_srom_suspend(struct device *dev)
|
||||
struct exynos_srom *srom = dev_get_drvdata(dev);
|
||||
|
||||
exynos_srom_save(srom->reg_base, srom->reg_offset,
|
||||
ARRAY_SIZE(exynos_srom_offsets));
|
||||
ARRAY_SIZE(exynos_srom_offsets));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -186,7 +186,7 @@ static int exynos_srom_resume(struct device *dev)
|
||||
struct exynos_srom *srom = dev_get_drvdata(dev);
|
||||
|
||||
exynos_srom_restore(srom->reg_base, srom->reg_offset,
|
||||
ARRAY_SIZE(exynos_srom_offsets));
|
||||
ARRAY_SIZE(exynos_srom_offsets));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
@ -1398,7 +1398,7 @@ static int exynos5_dmc_probe(struct platform_device *pdev)
|
||||
return PTR_ERR(dmc->base_drexi1);
|
||||
|
||||
dmc->clk_regmap = syscon_regmap_lookup_by_phandle(np,
|
||||
"samsung,syscon-clk");
|
||||
"samsung,syscon-clk");
|
||||
if (IS_ERR(dmc->clk_regmap))
|
||||
return PTR_ERR(dmc->clk_regmap);
|
||||
|
||||
@ -1477,7 +1477,6 @@ static int exynos5_dmc_probe(struct platform_device *pdev)
|
||||
exynos5_dmc_df_profile.polling_ms = 500;
|
||||
}
|
||||
|
||||
|
||||
dmc->df = devm_devfreq_add_device(dev, &exynos5_dmc_df_profile,
|
||||
DEVFREQ_GOV_SIMPLE_ONDEMAND,
|
||||
&dmc->gov_data);
|
||||
|
Loading…
Reference in New Issue
Block a user