[U-Boot] [PATCH v2 1/3] include: configs: Add gunzip size for HiKey board

From: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
Default 8MB gunzip size is not enough to load the release kernel, hence fix 64MB size for uncompressing the kernel.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org Reviewed-by: Simon Glass sjg@chromium.org ---
Changes in v2: Added Simon's Reviewed-by tag.
include/configs/hikey.h | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/include/configs/hikey.h b/include/configs/hikey.h index 1376d6155de..572a52fad59 100644 --- a/include/configs/hikey.h +++ b/include/configs/hikey.h @@ -18,6 +18,8 @@
#define CONFIG_REMAKE_ELF
+#define CONFIG_SYS_BOOTM_LEN SZ_64M + /* Physical Memory Map */
/* CONFIG_SYS_TEXT_BASE needs to align with where ATF loads bl33.bin */

From: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
Convert HiSilicon HI6220 MMC driver based on DWMMC IP to driver model.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org Reviewed-by: Simon Glass sjg@chromium.org ---
Changes in v2: Added Simon's Reviewed-by tag.
configs/hikey_defconfig | 1 + drivers/mmc/hi6220_dw_mmc.c | 100 +++++++++++++++++++++++++----------- 2 files changed, 70 insertions(+), 31 deletions(-)
diff --git a/configs/hikey_defconfig b/configs/hikey_defconfig index 8dc5a2823eb..cced2b4802e 100644 --- a/configs/hikey_defconfig +++ b/configs/hikey_defconfig @@ -18,6 +18,7 @@ CONFIG_DEFAULT_DEVICE_TREE="hi6220-hikey" CONFIG_ENV_IS_IN_FAT=y CONFIG_ENV_FAT_INTERFACE="mmc" CONFIG_ENV_FAT_DEVICE_AND_PART="1:1" +CONFIG_DM_MMC=y CONFIG_MMC_DW=y CONFIG_MMC_DW_K3=y CONFIG_CONS_INDEX=4 diff --git a/drivers/mmc/hi6220_dw_mmc.c b/drivers/mmc/hi6220_dw_mmc.c index ce395d53c94..cc58aff38cc 100644 --- a/drivers/mmc/hi6220_dw_mmc.c +++ b/drivers/mmc/hi6220_dw_mmc.c @@ -5,51 +5,89 @@ */
#include <common.h> +#include <dm.h> #include <dwmmc.h> +#include <errno.h> +#include <fdtdec.h> #include <malloc.h> -#include <linux/errno.h>
-#define DWMMC_MAX_CH_NUM 4 +DECLARE_GLOBAL_DATA_PTR;
-#define DWMMC_MAX_FREQ 50000000 -#define DWMMC_MIN_FREQ 400000 +struct hi6220_dwmmc_plat { + struct mmc_config cfg; + struct mmc mmc; +};
-/* Source clock is configured to 100MHz by ATF bl1*/ -#define MMC0_DEFAULT_FREQ 100000000 +struct hi6220_dwmmc_priv_data { + struct dwmci_host host; +};
-static int hi6220_dwmci_core_init(struct dwmci_host *host, int index) +static int hi6220_dwmmc_ofdata_to_platdata(struct udevice *dev) { - host->name = "Hisilicon DWMMC"; + struct hi6220_dwmmc_priv_data *priv = dev_get_priv(dev); + struct dwmci_host *host = &priv->host;
- host->dev_index = index; + host->name = dev->name; + host->ioaddr = (void *)devfdt_get_addr(dev); + host->buswidth = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev), + "bus-width", 4); + + /* use non-removable property for differentiating SD card and eMMC */ + if (dev_read_bool(dev, "non-removable")) + host->dev_index = 0; + else + host->dev_index = 1; + + host->priv = priv;
- /* Add the mmc channel to be registered with mmc core */ - if (add_dwmci(host, DWMMC_MAX_FREQ, DWMMC_MIN_FREQ)) { - printf("DWMMC%d registration failed\n", index); - return -1; - } return 0; }
-/* - * This function adds the mmc channel to be registered with mmc core. - * index - mmc channel number. - * regbase - register base address of mmc channel specified in 'index'. - * bus_width - operating bus width of mmc channel specified in 'index'. - */ -int hi6220_dwmci_add_port(int index, u32 regbase, int bus_width) +static int hi6220_dwmmc_probe(struct udevice *dev) { - struct dwmci_host *host = NULL; + struct hi6220_dwmmc_plat *plat = dev_get_platdata(dev); + struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); + struct hi6220_dwmmc_priv_data *priv = dev_get_priv(dev); + struct dwmci_host *host = &priv->host;
- host = calloc(1, sizeof(struct dwmci_host)); - if (!host) { - pr_err("dwmci_host calloc failed!\n"); - return -ENOMEM; - } + /* Use default bus speed due to absence of clk driver */ + host->bus_hz = 50000000;
- host->ioaddr = (void *)(ulong)regbase; - host->buswidth = bus_width; - host->bus_hz = MMC0_DEFAULT_FREQ; + dwmci_setup_cfg(&plat->cfg, host, host->bus_hz, 400000); + host->mmc = &plat->mmc;
- return hi6220_dwmci_core_init(host, index); + host->mmc->priv = &priv->host; + upriv->mmc = host->mmc; + host->mmc->dev = dev; + + return dwmci_probe(dev); } + +static int hi6220_dwmmc_bind(struct udevice *dev) +{ + struct hi6220_dwmmc_plat *plat = dev_get_platdata(dev); + int ret; + + ret = dwmci_bind(dev, &plat->mmc, &plat->cfg); + if (ret) + return ret; + + return 0; +} + +static const struct udevice_id hi6220_dwmmc_ids[] = { + { .compatible = "hisilicon,hi6220-dw-mshc" }, + { } +}; + +U_BOOT_DRIVER(hi6220_dwmmc_drv) = { + .name = "hi6220_dwmmc", + .id = UCLASS_MMC, + .of_match = hi6220_dwmmc_ids, + .ofdata_to_platdata = hi6220_dwmmc_ofdata_to_platdata, + .ops = &dm_dwmci_ops, + .bind = hi6220_dwmmc_bind, + .probe = hi6220_dwmmc_probe, + .priv_auto_alloc_size = sizeof(struct hi6220_dwmmc_priv_data), + .platdata_auto_alloc_size = sizeof(struct hi6220_dwmmc_plat), +};

On Thu, Dec 27, 2018 at 07:04:04PM +0530, Manivannan Sadhasivam wrote:
From: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
Convert HiSilicon HI6220 MMC driver based on DWMMC IP to driver model.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org Reviewed-by: Simon Glass sjg@chromium.org
Changes in v2: Added Simon's Reviewed-by tag.
configs/hikey_defconfig | 1 + drivers/mmc/hi6220_dw_mmc.c | 100 +++++++++++++++++++++++++----------- 2 files changed, 70 insertions(+), 31 deletions(-)
diff --git a/configs/hikey_defconfig b/configs/hikey_defconfig index 8dc5a2823eb..cced2b4802e 100644 --- a/configs/hikey_defconfig +++ b/configs/hikey_defconfig @@ -18,6 +18,7 @@ CONFIG_DEFAULT_DEVICE_TREE="hi6220-hikey" CONFIG_ENV_IS_IN_FAT=y CONFIG_ENV_FAT_INTERFACE="mmc" CONFIG_ENV_FAT_DEVICE_AND_PART="1:1" +CONFIG_DM_MMC=y CONFIG_MMC_DW=y CONFIG_MMC_DW_K3=y CONFIG_CONS_INDEX=4 diff --git a/drivers/mmc/hi6220_dw_mmc.c b/drivers/mmc/hi6220_dw_mmc.c index ce395d53c94..cc58aff38cc 100644 --- a/drivers/mmc/hi6220_dw_mmc.c +++ b/drivers/mmc/hi6220_dw_mmc.c @@ -5,51 +5,89 @@ */
#include <common.h> +#include <dm.h> #include <dwmmc.h> +#include <errno.h> +#include <fdtdec.h> #include <malloc.h> -#include <linux/errno.h>
-#define DWMMC_MAX_CH_NUM 4 +DECLARE_GLOBAL_DATA_PTR;
-#define DWMMC_MAX_FREQ 50000000 -#define DWMMC_MIN_FREQ 400000 +struct hi6220_dwmmc_plat {
- struct mmc_config cfg;
- struct mmc mmc;
+};
-/* Source clock is configured to 100MHz by ATF bl1*/ -#define MMC0_DEFAULT_FREQ 100000000 +struct hi6220_dwmmc_priv_data {
- struct dwmci_host host;
+};
-static int hi6220_dwmci_core_init(struct dwmci_host *host, int index) +static int hi6220_dwmmc_ofdata_to_platdata(struct udevice *dev) {
- host->name = "Hisilicon DWMMC";
- struct hi6220_dwmmc_priv_data *priv = dev_get_priv(dev);
- struct dwmci_host *host = &priv->host;
- host->dev_index = index;
- host->name = dev->name;
- host->ioaddr = (void *)devfdt_get_addr(dev);
- host->buswidth = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev),
"bus-width", 4);
- /* use non-removable property for differentiating SD card and eMMC */
- if (dev_read_bool(dev, "non-removable"))
host->dev_index = 0;
- else
host->dev_index = 1;
- host->priv = priv;
- /* Add the mmc channel to be registered with mmc core */
- if (add_dwmci(host, DWMMC_MAX_FREQ, DWMMC_MIN_FREQ)) {
printf("DWMMC%d registration failed\n", index);
return -1;
- } return 0;
}
-/*
- This function adds the mmc channel to be registered with mmc core.
- index - mmc channel number.
- regbase - register base address of mmc channel specified in 'index'.
- bus_width - operating bus width of mmc channel specified in 'index'.
- */
-int hi6220_dwmci_add_port(int index, u32 regbase, int bus_width) +static int hi6220_dwmmc_probe(struct udevice *dev) {
- struct dwmci_host *host = NULL;
- struct hi6220_dwmmc_plat *plat = dev_get_platdata(dev);
- struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
- struct hi6220_dwmmc_priv_data *priv = dev_get_priv(dev);
- struct dwmci_host *host = &priv->host;
- host = calloc(1, sizeof(struct dwmci_host));
- if (!host) {
pr_err("dwmci_host calloc failed!\n");
return -ENOMEM;
- }
- /* Use default bus speed due to absence of clk driver */
- host->bus_hz = 50000000;
- host->ioaddr = (void *)(ulong)regbase;
- host->buswidth = bus_width;
- host->bus_hz = MMC0_DEFAULT_FREQ;
- dwmci_setup_cfg(&plat->cfg, host, host->bus_hz, 400000);
- host->mmc = &plat->mmc;
- return hi6220_dwmci_core_init(host, index);
- host->mmc->priv = &priv->host;
- upriv->mmc = host->mmc;
- host->mmc->dev = dev;
- return dwmci_probe(dev);
}
+static int hi6220_dwmmc_bind(struct udevice *dev) +{
- struct hi6220_dwmmc_plat *plat = dev_get_platdata(dev);
- int ret;
- ret = dwmci_bind(dev, &plat->mmc, &plat->cfg);
- if (ret)
return ret;
- return 0;
+}
+static const struct udevice_id hi6220_dwmmc_ids[] = {
- { .compatible = "hisilicon,hi6220-dw-mshc" },
- { }
+};
+U_BOOT_DRIVER(hi6220_dwmmc_drv) = {
- .name = "hi6220_dwmmc",
- .id = UCLASS_MMC,
- .of_match = hi6220_dwmmc_ids,
- .ofdata_to_platdata = hi6220_dwmmc_ofdata_to_platdata,
- .ops = &dm_dwmci_ops,
- .bind = hi6220_dwmmc_bind,
- .probe = hi6220_dwmmc_probe,
- .priv_auto_alloc_size = sizeof(struct hi6220_dwmmc_priv_data),
- .platdata_auto_alloc_size = sizeof(struct hi6220_dwmmc_plat),
+};

On Thu, Dec 27, 2018 at 07:04:04PM +0530, Manivannan Sadhasivam wrote:
From: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
Convert HiSilicon HI6220 MMC driver based on DWMMC IP to driver model.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot/master, thanks!

From: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
Add MMC nodes for HiKey board based on HI6220 SoC. There are three MMC controllers in this SoC, first one used for eMMC, second one used for SD card and third one is not used by u-boot.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org Reviewed-by: Simon Glass sjg@chromium.org ---
Changes in v2:
* Added hi6220-hikey-u-boot.dtsi for u-boot additions as per Tom's comment. * Added Simon's Reviewed-by tag.
arch/arm/dts/hi6220-hikey-u-boot.dtsi | 14 ++++++++++++++ arch/arm/dts/hi6220-hikey.dts | 11 +++++++++++ arch/arm/dts/hi6220.dtsi | 18 ++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 arch/arm/dts/hi6220-hikey-u-boot.dtsi
diff --git a/arch/arm/dts/hi6220-hikey-u-boot.dtsi b/arch/arm/dts/hi6220-hikey-u-boot.dtsi new file mode 100644 index 00000000000..31139832401 --- /dev/null +++ b/arch/arm/dts/hi6220-hikey-u-boot.dtsi @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * U-Boot additions + * + * Copyright (c) 2018 Linaro Ltd. + */ + +&mmc0 { + u-boot,dm-pre-reloc; +}; + +&mmc1 { + u-boot,dm-pre-reloc; +}; diff --git a/arch/arm/dts/hi6220-hikey.dts b/arch/arm/dts/hi6220-hikey.dts index 24f09257af0..d63929348bb 100644 --- a/arch/arm/dts/hi6220-hikey.dts +++ b/arch/arm/dts/hi6220-hikey.dts @@ -40,6 +40,17 @@ }; };
+&mmc0 { + status = "okay"; + non-removable; + bus-width = <8>; +}; + +&mmc1 { + status = "okay"; + bus-width = <4>; +}; + &uart2 { label = "LS-UART0"; }; diff --git a/arch/arm/dts/hi6220.dtsi b/arch/arm/dts/hi6220.dtsi index a610ccb6346..501c8906fd6 100644 --- a/arch/arm/dts/hi6220.dtsi +++ b/arch/arm/dts/hi6220.dtsi @@ -162,6 +162,24 @@ #clock-cells = <1>; };
+ mmc0: dwmmc@f723d000 { + compatible = "hisilicon,hi6220-dw-mshc"; + reg = <0x0 0xf723d000 0x0 0x1000>; + interrupts = <0x0 0x48 0x4>; + clocks = <&sys_ctrl 2>, <&sys_ctrl 1>; + clock-names = "ciu", "biu"; + status = "disabled"; + }; + + mmc1: dwmmc@f723e000 { + compatible = "hisilicon,hi6220-dw-mshc"; + reg = <0x0 0xf723e000 0x0 0x1000>; + interrupts = <0x0 0x49 0x4>; + clocks = <&sys_ctrl 4>, <&sys_ctrl 3>; + clock-names = "ciu", "biu"; + status = "disabled"; + }; + uart0: uart@f8015000 { /* console */ compatible = "arm,pl011", "arm,primecell"; reg = <0x0 0xf8015000 0x0 0x1000>;

On Thu, Dec 27, 2018 at 07:04:05PM +0530, Manivannan Sadhasivam wrote:
From: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
Add MMC nodes for HiKey board based on HI6220 SoC. There are three MMC controllers in this SoC, first one used for eMMC, second one used for SD card and third one is not used by u-boot.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org Reviewed-by: Simon Glass sjg@chromium.org
Reviewed-by: Tom Rini trini@konsulko.com
But can you please do a follow-up series that syncs the DT files with say Linux v4.20? Thanks!

On Thu, Dec 27, 2018 at 08:55:19AM -0500, Tom Rini wrote:
On Thu, Dec 27, 2018 at 07:04:05PM +0530, Manivannan Sadhasivam wrote:
From: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
Add MMC nodes for HiKey board based on HI6220 SoC. There are three MMC controllers in this SoC, first one used for eMMC, second one used for SD card and third one is not used by u-boot.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org Reviewed-by: Simon Glass sjg@chromium.org
Reviewed-by: Tom Rini trini@konsulko.com
But can you please do a follow-up series that syncs the DT files with say Linux v4.20? Thanks!
Sure, will do as a part of the follow up series which converts USB driver to driver model.
Thanks, Mani
-- Tom

On Thu, Dec 27, 2018 at 07:04:05PM +0530, Manivannan Sadhasivam wrote:
From: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
Add MMC nodes for HiKey board based on HI6220 SoC. There are three MMC controllers in this SoC, first one used for eMMC, second one used for SD card and third one is not used by u-boot.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org Reviewed-by: Simon Glass sjg@chromium.org Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

On Thu, 27 Dec 2018 at 06:34, Manivannan Sadhasivam manivannan.sadhasivam@linaro.org wrote:
From: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
Default 8MB gunzip size is not enough to load the release kernel, hence fix 64MB size for uncompressing the kernel.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org Reviewed-by: Simon Glass sjg@chromium.org
Changes in v2: Added Simon's Reviewed-by tag.
include/configs/hikey.h | 2 ++ 1 file changed, 2 insertions(+)
Reviewed-by: Simon Glass sjg@chromium.org

On Thu, Dec 27, 2018 at 07:04:03PM +0530, Manivannan Sadhasivam wrote:
From: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
Default 8MB gunzip size is not enough to load the release kernel, hence fix 64MB size for uncompressing the kernel.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org Reviewed-by: Simon Glass sjg@chromium.org Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot/master, thanks!
participants (3)
-
Manivannan Sadhasivam
-
Simon Glass
-
Tom Rini