diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-arthur.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-arthur.dts index f5636cdff0f974..002936a135bb17 100644 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-arthur.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-arthur.dts @@ -639,6 +639,10 @@ spd_ ## bus ## _ ## index: spd@addr,4cc5118 ## index ## 000 { \ memory-region = <&video_engine_memory0>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + &espi0 { status = "okay"; perif-dma-mode; diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-congo.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-congo.dts index 918275c34e6ac9..f708095b7486ac 100644 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-congo.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-congo.dts @@ -995,6 +995,10 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ memory-region = <&video_engine_memory0>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + &espi0 { status = "okay"; perif-dma-mode; @@ -1008,7 +1012,7 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ oob-dma-mode; flash-dma-mode; flash-edaf-mode = <0>; - flash-edaf-tgt-addr = <&edaf0>; + flash-edaf-tgt-addr = <0x1 0x80000000>; flash-edaf-size = <0x0 0x2000000>; }; diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-eagle.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-eagle.dts index 3ce3b1f21a6950..819596bf97aba2 100644 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-eagle.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-eagle.dts @@ -978,6 +978,10 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ memory-region = <&video_engine_memory0>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + &espi0 { status = "okay"; perif-dma-mode; @@ -991,7 +995,7 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ oob-dma-mode; flash-dma-mode; flash-edaf-mode = <0>; - flash-edaf-tgt-addr = <&edaf0>; + flash-edaf-tgt-addr = <0x1 0x80000000>; flash-edaf-size = <0x0 0x2000000>; }; diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-falcon.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-falcon.dts index 4ff896c3f709ff..5c58ef3d734419 100644 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-falcon.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-falcon.dts @@ -541,6 +541,10 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ memory-region = <&video_engine_memory0>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + &espi0 { status = "okay"; perif-dma-mode; @@ -554,7 +558,7 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ oob-dma-mode; flash-dma-mode; flash-edaf-mode = <0>; - flash-edaf-tgt-addr = <&edaf0>; + flash-edaf-tgt-addr = <0x1 0x80000000>; flash-edaf-size = <0x0 0x2000000>; }; diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-ghana.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-ghana.dts index 38518cb0bc2af2..427ae6b74f6de8 100755 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-ghana.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-ghana.dts @@ -780,6 +780,10 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ memory-region = <&video_engine_memory1>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + /* eSPI node for P0 - PCC, eDAF enabled */ &espi0 { status = "okay"; @@ -794,7 +798,7 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ oob-dma-mode; flash-dma-mode; flash-edaf-mode = <0>; - flash-edaf-tgt-addr = <&edaf0>; + flash-edaf-tgt-addr = <0x1 0x80000000>; flash-edaf-size = <0x0 0x2000000>; }; diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-hornbill-mps.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-hornbill-mps.dts index f0d355a2aaaf83..ce6a8cec253ca4 100644 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-hornbill-mps.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-hornbill-mps.dts @@ -98,7 +98,7 @@ }; edaf0: eadf0-memory@428000000 { - reg = <0x4 0x28000000 0x0 0x4000000>; + reg = <0x4 0x28000000 0x0 0x2000000>; no-map; }; @@ -1076,6 +1076,10 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ memory-region = <&video_engine_memory1>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + /* eSPI node for P0 - PCC, eDAF enabled */ &espi0 { status = "okay"; @@ -1090,7 +1094,7 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ oob-dma-mode; flash-dma-mode; flash-edaf-mode = <0>; - flash-edaf-tgt-addr = <&edaf0>; + flash-edaf-tgt-addr = <0x1 0x80000000>; flash-edaf-size = <0x0 0x2000000>; }; diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-hornbill.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-hornbill.dts index bad32f6aa3fc42..386397182d9972 100644 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-hornbill.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-hornbill.dts @@ -1041,6 +1041,10 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ memory-region = <&video_engine_memory1>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + /* eSPI node for P0 - PCC, eDAF enabled */ &espi0 { status = "okay"; @@ -1055,7 +1059,7 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ oob-dma-mode; flash-dma-mode; flash-edaf-mode = <0>; - flash-edaf-tgt-addr = <&edaf0>; + flash-edaf-tgt-addr = <0x1 0x80000000>; flash-edaf-size = <0x0 0x2000000>; }; diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-kenya.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-kenya.dts index 850fe01a4628b5..c0687d8e66927f 100755 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-kenya.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-kenya.dts @@ -637,6 +637,10 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ memory-region = <&video_engine_memory0>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + &espi0 { status = "okay"; perif-dma-mode; @@ -650,7 +654,7 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ oob-dma-mode; flash-dma-mode; flash-edaf-mode = <0>; - flash-edaf-tgt-addr = <&edaf0>; + flash-edaf-tgt-addr = <0x1 0x80000000>; flash-edaf-size = <0x0 0x2000000>; }; diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-marley.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-marley.dts index dc84c221df4844..8715b6e6a2509e 100755 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-marley.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-marley.dts @@ -422,12 +422,17 @@ memory-region = <&video_engine_memory>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + &espi0 { status = "okay"; perif-dma-mode; oob-dma-mode; flash-dma-mode; - flash-edaf-tgt-addr = <&edaf0>; + flash-edaf-tgt-addr = <0x1 0x80000000>; + flash-edaf-size = <0x0 0x2000000>; }; &lpc0_pcc { diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-morocco.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-morocco.dts index 66e520ac7247b8..d697ca8ea87266 100644 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-morocco.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-morocco.dts @@ -1208,6 +1208,10 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ memory-region = <&video_engine_memory1>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + /* eSPI node for P0 - PCC, eDAF enabled */ &espi0 { status = "okay"; @@ -1223,7 +1227,8 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ oob-dma-mode; flash-dma-mode; flash-edaf-mode = <0>; - flash-edaf-tgt-addr = <&edaf0>; + flash-edaf-tgt-addr = <0x1 0x80000000>; + flash-edaf-size = <0x0 0x2000000>; }; /* eSPI node for P1 - PCC only */ diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-nigeria.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-nigeria.dts index 2b79d5e652d5b0..4504b50bc1d7ee 100755 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-nigeria.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-nigeria.dts @@ -974,6 +974,10 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ memory-region = <&video_engine_memory1>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + /* eSPI node for P0 - PCC, eDAF enabled */ &espi0 { status = "okay"; @@ -988,7 +992,7 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ oob-dma-mode; flash-dma-mode; flash-edaf-mode = <0>; - flash-edaf-tgt-addr = <&edaf0>; + flash-edaf-tgt-addr = <0x1 0x80000000>; flash-edaf-size = <0x0 0x2000000>; }; diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-nigerias3.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-nigerias3.dts index 8a7743f5a30e90..53fabc59e6c166 100644 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-nigerias3.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-nigerias3.dts @@ -439,6 +439,10 @@ spd_ ## bus ## _ ## index: spd@addr,4cc5118 ## index ## 000 { \ memory-region = <&video_engine_memory0>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + &espi0 { status = "okay"; perif-dma-mode; @@ -452,7 +456,7 @@ spd_ ## bus ## _ ## index: spd@addr,4cc5118 ## index ## 000 { \ oob-dma-mode; flash-dma-mode; flash-edaf-mode = <0>; - flash-edaf-tgt-addr = <&edaf0>; + flash-edaf-tgt-addr = <0x1 0x80000000>; flash-edaf-size = <0x0 0x2000000>; }; diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-seagull.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-seagull.dts index fd9f3ab5fa0414..0cdf6a49b710f4 100644 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-seagull.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-seagull.dts @@ -766,6 +766,10 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ memory-region = <&video_engine_memory1>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + /* eSPI node for P0 - PCC, eDAF enabled */ &espi0 { status = "okay"; @@ -780,7 +784,7 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ oob-dma-mode; flash-dma-mode; flash-edaf-mode = <0>; - flash-edaf-tgt-addr = <&edaf0>; + flash-edaf-tgt-addr = <0x1 0x80000000>; flash-edaf-size = <0x0 0x2000000>; }; diff --git a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-unknown.dts b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-unknown.dts index 6c16c850ea59be..9e70d2a3c47e83 100644 --- a/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-unknown.dts +++ b/arch/arm64/boot/dts/aspeed/aspeed-bmc-amd-unknown.dts @@ -303,6 +303,10 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ memory-region = <&video_engine_memory0>; }; +&edaf0 { + reg = <0x4 0x28000000 0x0 0x2000000>; +}; + &espi0 { status = "okay"; perif-dma-mode; @@ -316,7 +320,7 @@ pmic_ ## bus ## _ ## index: pmic@addr{ \ oob-dma-mode; flash-dma-mode; flash-edaf-mode = <0>; - flash-edaf-tgt-addr = <&edaf0>; + flash-edaf-tgt-addr = <0x1 0x80000000>; flash-edaf-size = <0x0 0x2000000>; }; diff --git a/drivers/soc/aspeed/espi/ast2700-espi.c b/drivers/soc/aspeed/espi/ast2700-espi.c index dd6b9dc55c0013..bbfa8fafb62cc4 100644 --- a/drivers/soc/aspeed/espi/ast2700-espi.c +++ b/drivers/soc/aspeed/espi/ast2700-espi.c @@ -2036,7 +2036,6 @@ int ast2700_espi_flash_probe(struct aspeed_espi *espi) struct device_node *np; struct resource res; struct device *dev; - void *virt; int rc; dev = espi->dev; @@ -2055,21 +2054,33 @@ int ast2700_espi_flash_probe(struct aspeed_espi *espi) of_property_read_u32(dev->of_node, "flash-edaf-mode", &flash->edaf.mode); dev_info(dev, "eDAF mode: 0x%x\n", flash->edaf.mode); if (flash->edaf.mode == EDAF_MODE_MIX) { - np = of_parse_phandle(dev->of_node, "flash-edaf-tgt-addr", 0); - if (!np || of_address_to_resource(np, 0, &res)) { - dev_err(dev, "cannot get eDAF memory region\n"); - return -ENODEV; - } + rc = of_property_read_u64(dev->of_node, "flash-edaf-tgt-addr", + &flash->edaf.taddr); + if (!rc && IS_ALIGNED(flash->edaf.taddr, FLASH_EDAF_ALIGN)) { + rc = of_property_read_u64(dev->of_node, "flash-edaf-size", + &flash->edaf.size); + if (rc || !IS_ALIGNED(flash->edaf.size, FLASH_EDAF_ALIGN)) { + dev_err(dev, "cannot get 16MB-aligned eDAF size\n"); + return -ENODEV; + } + } else { + void __iomem *edaf_virt; - of_node_put(np); + np = of_parse_phandle(dev->of_node, "flash-edaf-tgt-addr", 0); + if (!np || of_address_to_resource(np, 0, &res)) { + dev_err(dev, "cannot get eDAF memory region\n"); + return -ENODEV; + } - flash->edaf.taddr = res.start; - flash->edaf.size = resource_size(&res); + of_node_put(np); - virt = devm_ioremap_resource(dev, &res); - if (!virt) { - dev_err(dev, "cannot map eDAF memory region\n"); - return -ENOMEM; + flash->edaf.taddr = res.start; + flash->edaf.size = resource_size(&res); + + edaf_virt = devm_ioremap_resource(dev, &res); + if (IS_ERR(edaf_virt)) + return dev_err_probe(dev, PTR_ERR(edaf_virt), + "cannot map eDAF memory region\n"); } }