blob: 5816625c89acc04bb68668e65a5be4c11d39dabc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#ifndef __MACH_IMX28_H
#define __MACH_IMX28_H
#include <linux/bitfield.h>
#include <io.h>
#define DRAM_CTL29_CS0_EN BIT(24)
#define DRAM_CTL29_CS1_EN BIT(25)
#define DRAM_CTL29_COLUMNS_DIFF GENMASK(18, 16)
#define DRAM_CTL29_ROWS_DIFF GENMASK(10, 8)
#define DRAM_CTL31_EIGHT_BANKS BIT(16)
#define DRAM_CTL(n) (IMX_SDRAMC_BASE + 4 * (n))
static inline u32 imx28_get_memsize(void)
{
u32 ctl29 = readl(DRAM_CTL(29));
u32 ctl31 = readl(DRAM_CTL(31));
int rows, columns, banks, cs0, cs1;
columns = 12 - FIELD_GET(DRAM_CTL29_COLUMNS_DIFF, ctl29);
rows = 15 - FIELD_GET(DRAM_CTL29_ROWS_DIFF, ctl29);
banks = FIELD_GET(DRAM_CTL31_EIGHT_BANKS, ctl31) ? 8 : 4;
cs0 = FIELD_GET(DRAM_CTL29_CS0_EN, ctl29);
cs1 = FIELD_GET(DRAM_CTL29_CS1_EN, ctl29);
return (1 << columns) * (1 << rows) * banks * (cs0 + cs1);
}
#endif /* __MACH_IMX28_H */
|