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

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 --- include/configs/hikey.h | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/include/configs/hikey.h b/include/configs/hikey.h index 1376d6155d..572a52fad5 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 */

Convert HiSilicon HI6220 MMC driver based on DWMMC IP to driver model.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org --- 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 8dc5a2823e..cced2b4802 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 ce395d53c9..cc58aff38c 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, 20 Dec 2018 at 06:07, Manivannan Sadhasivam manivannan.sadhasivam@linaro.org wrote:
Convert HiSilicon HI6220 MMC driver based on DWMMC IP to driver model.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
configs/hikey_defconfig | 1 + drivers/mmc/hi6220_dw_mmc.c | 100 +++++++++++++++++++++++++----------- 2 files changed, 70 insertions(+), 31 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org

Add MMC nodes for HiKey board based on HI6220 SoC. There are two MMC controllers in this SoC, first one used for eMMC and second one used for SD card.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org --- arch/arm/dts/hi6220-hikey.dts | 13 +++++++++++++ arch/arm/dts/hi6220.dtsi | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+)
diff --git a/arch/arm/dts/hi6220-hikey.dts b/arch/arm/dts/hi6220-hikey.dts index 24f09257af..9c8f2467dc 100644 --- a/arch/arm/dts/hi6220-hikey.dts +++ b/arch/arm/dts/hi6220-hikey.dts @@ -40,6 +40,19 @@ }; };
+&mmc0 { + u-boot,dm-pre-reloc; + status = "okay"; + non-removable; + bus-width = <8>; +}; + +&mmc1 { + u-boot,dm-pre-reloc; + status = "okay"; + bus-width = <4>; +}; + &uart2 { label = "LS-UART0"; }; diff --git a/arch/arm/dts/hi6220.dtsi b/arch/arm/dts/hi6220.dtsi index a610ccb634..501c8906fd 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, 20 Dec 2018 at 06:07, Manivannan Sadhasivam manivannan.sadhasivam@linaro.org wrote:
Add MMC nodes for HiKey board based on HI6220 SoC. There are two MMC controllers in this SoC, first one used for eMMC and second one used for SD card.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
arch/arm/dts/hi6220-hikey.dts | 13 +++++++++++++ arch/arm/dts/hi6220.dtsi | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+)
Reviewed-by: Simon Glass sjg@chromium.org

On Thu, Dec 20, 2018 at 06:37:02PM +0530, Manivannan Sadhasivam wrote:
Add MMC nodes for HiKey board based on HI6220 SoC. There are two MMC controllers in this SoC, first one used for eMMC and second one used for SD card.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
arch/arm/dts/hi6220-hikey.dts | 13 +++++++++++++ arch/arm/dts/hi6220.dtsi | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+)
diff --git a/arch/arm/dts/hi6220-hikey.dts b/arch/arm/dts/hi6220-hikey.dts index 24f09257af..9c8f2467dc 100644 --- a/arch/arm/dts/hi6220-hikey.dts +++ b/arch/arm/dts/hi6220-hikey.dts @@ -40,6 +40,19 @@ }; };
+&mmc0 {
- u-boot,dm-pre-reloc;
Looks like hikey needs to be updated to have a -u-boot.dtsi file for these kind of changes so that the core of the dts files can be synced from Linux unchanged, thanks!

Hi Tom,
On Wed, Dec 26, 2018 at 09:36:25AM -0500, Tom Rini wrote:
On Thu, Dec 20, 2018 at 06:37:02PM +0530, Manivannan Sadhasivam wrote:
Add MMC nodes for HiKey board based on HI6220 SoC. There are two MMC controllers in this SoC, first one used for eMMC and second one used for SD card.
Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
arch/arm/dts/hi6220-hikey.dts | 13 +++++++++++++ arch/arm/dts/hi6220.dtsi | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+)
diff --git a/arch/arm/dts/hi6220-hikey.dts b/arch/arm/dts/hi6220-hikey.dts index 24f09257af..9c8f2467dc 100644 --- a/arch/arm/dts/hi6220-hikey.dts +++ b/arch/arm/dts/hi6220-hikey.dts @@ -40,6 +40,19 @@ }; };
+&mmc0 {
- u-boot,dm-pre-reloc;
Looks like hikey needs to be updated to have a -u-boot.dtsi file for these kind of changes so that the core of the dts files can be synced from Linux unchanged, thanks!
Agree! Will add this in next revision.
Thanks, Mani
-- Tom

On Thu, 20 Dec 2018 at 06:07, Manivannan Sadhasivam manivannan.sadhasivam@linaro.org wrote:
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
include/configs/hikey.h | 2 ++ 1 file changed, 2 insertions(+)
Reviewed-by: Simon Glass sjg@chromium.org
participants (3)
-
Manivannan Sadhasivam
-
Simon Glass
-
Tom Rini