|
@@ -11,6 +11,8 @@
|
|
#include <asm/io.h>
|
|
#include <asm/io.h>
|
|
|
|
|
|
#define MEM_MODE_MASK GENMASK(2, 0)
|
|
#define MEM_MODE_MASK GENMASK(2, 0)
|
|
|
|
+#define SWP_FMC_OFFSET 10
|
|
|
|
+#define SWP_FMC_MASK GENMASK(SWP_FMC_OFFSET+1, SWP_FMC_OFFSET)
|
|
#define NOT_FOUND 0xff
|
|
#define NOT_FOUND 0xff
|
|
|
|
|
|
struct stm32_fmc_regs {
|
|
struct stm32_fmc_regs {
|
|
@@ -256,27 +258,36 @@ static int stm32_fmc_ofdata_to_platdata(struct udevice *dev)
|
|
struct ofnode_phandle_args args;
|
|
struct ofnode_phandle_args args;
|
|
u32 *syscfg_base;
|
|
u32 *syscfg_base;
|
|
u32 mem_remap;
|
|
u32 mem_remap;
|
|
|
|
+ u32 swp_fmc;
|
|
ofnode bank_node;
|
|
ofnode bank_node;
|
|
char *bank_name;
|
|
char *bank_name;
|
|
u8 bank = 0;
|
|
u8 bank = 0;
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
- mem_remap = dev_read_u32_default(dev, "st,mem_remap", NOT_FOUND);
|
|
|
|
- if (mem_remap != NOT_FOUND) {
|
|
|
|
- ret = dev_read_phandle_with_args(dev, "st,syscfg", NULL, 0, 0,
|
|
|
|
|
|
+ ret = dev_read_phandle_with_args(dev, "st,syscfg", NULL, 0, 0,
|
|
&args);
|
|
&args);
|
|
- if (ret) {
|
|
|
|
- debug("%s: can't find syscon device (%d)\n", __func__,
|
|
|
|
- ret);
|
|
|
|
- return ret;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ if (ret) {
|
|
|
|
+ dev_dbg(dev, "%s: can't find syscon device (%d)\n", __func__, ret);
|
|
|
|
+ } else {
|
|
syscfg_base = (u32 *)ofnode_get_addr(args.node);
|
|
syscfg_base = (u32 *)ofnode_get_addr(args.node);
|
|
|
|
|
|
- /* set memory mapping selection */
|
|
|
|
- clrsetbits_le32(syscfg_base, MEM_MODE_MASK, mem_remap);
|
|
|
|
- } else {
|
|
|
|
- debug("%s: cannot find st,mem_remap property\n", __func__);
|
|
|
|
|
|
+ mem_remap = dev_read_u32_default(dev, "st,mem_remap", NOT_FOUND);
|
|
|
|
+ if (mem_remap != NOT_FOUND) {
|
|
|
|
+ /* set memory mapping selection */
|
|
|
|
+ clrsetbits_le32(syscfg_base, MEM_MODE_MASK, mem_remap);
|
|
|
|
+ } else {
|
|
|
|
+ dev_dbg(dev, "%s: cannot find st,mem_remap property\n", __func__);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ swp_fmc = dev_read_u32_default(dev, "st,swp_fmc", NOT_FOUND);
|
|
|
|
+ if (swp_fmc != NOT_FOUND) {
|
|
|
|
+ /* set fmc swapping selection */
|
|
|
|
+ clrsetbits_le32(syscfg_base, SWP_FMC_MASK, swp_fmc << SWP_FMC_OFFSET);
|
|
|
|
+ } else {
|
|
|
|
+ dev_dbg(dev, "%s: cannot find st,swp_fmc property\n", __func__);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ dev_dbg(dev, "syscfg %x = %x\n", (u32)syscfg_base, *syscfg_base);
|
|
}
|
|
}
|
|
|
|
|
|
dev_for_each_subnode(bank_node, dev) {
|
|
dev_for_each_subnode(bank_node, dev) {
|