Message ID | 20200117130244.14975-1-m.szyprowski@samsung.com |
---|---|
State | Accepted |
Commit | 86c88711082b9fb4da5f7eb0b80d5604c283f0c5 |
Headers | show |
Series | [v2] arm: exynos: Read default MMC device from XOM[7:5] pins | expand |
Hi, On 17/01/2020 22:02, Marek Szyprowski wrote: > XOM pins provide information for iROM bootloader about the boot device. > Those pins are mapped to lower bits of OP_MODE register (0x10000008), > which is common for all Exynos SoC variants. Set the default MMC device id > to reflect the boot device selected by XOM[7:5] pins (2 for the SD or 0 for > the eMMC). > > Signed-off-by: Marek Szyprowski <m.szyprowski at samsung.com> > --- > v2: > - store mmc boot device to ${mmcbootdev} env > - print information about boot mmc device > --- > arch/arm/mach-exynos/include/mach/cpu.h | 1 + > board/samsung/common/board.c | 28 +++++++++++++++++++++++++ > configs/odroid-xu3_defconfig | 1 + > configs/odroid_defconfig | 1 + > 4 files changed, 31 insertions(+) > > diff --git a/arch/arm/mach-exynos/include/mach/cpu.h b/arch/arm/mach-exynos/include/mach/cpu.h > index 766edeeb29..fb5fdaf3ba 100644 > --- a/arch/arm/mach-exynos/include/mach/cpu.h > +++ b/arch/arm/mach-exynos/include/mach/cpu.h > @@ -17,6 +17,7 @@ > > #define EXYNOS4_GPIO_PART3_BASE 0x03860000 > #define EXYNOS4_PRO_ID 0x10000000 > +#define EXYNOS4_OP_MODE 0x10000008 > #define EXYNOS4_SYSREG_BASE 0x10010000 > #define EXYNOS4_POWER_BASE 0x10020000 > #define EXYNOS4_SWRESET 0x10020400 > diff --git a/board/samsung/common/board.c b/board/samsung/common/board.c > index ee2fc7971e..cb94ced54e 100644 > --- a/board/samsung/common/board.c > +++ b/board/samsung/common/board.c > @@ -24,6 +24,8 @@ > #include <asm/arch/sromc.h> > #include <lcd.h> > #include <i2c.h> > +#include <mmc.h> > +#include <stdio_dev.h> > #include <usb.h> > #include <dwc3-uboot.h> > #include <samsung/misc.h> > @@ -42,6 +44,20 @@ __weak int exynos_power_init(void) > return 0; > } > > +/** > + * get_boot_mmc_dev() - read boot MMC device id from XOM[7:5] pins. > + */ > +static int get_boot_mmc_dev(void) > +{ > + u32 mode = readl(EXYNOS4_OP_MODE) & 0x1C; > + > + if (mode == 0x04) > + return 2; /* MMC2: SD */ > + > + /* MMC0: eMMC or unknown */ > + return 0; > +} > + > #if defined CONFIG_EXYNOS_TMU > /* Boot Time Thermal Analysis for SoC temperature threshold breach */ > static void boot_temp_check(void) > @@ -280,6 +296,8 @@ int board_late_init(void) > { > struct udevice *dev; > int ret; > + int mmcbootdev = get_boot_mmc_dev(); > + char mmcbootdev_str[16]; > > stdio_print_current_devices(); > ret = uclass_first_device_err(UCLASS_CROS_EC, &dev); > @@ -292,6 +310,11 @@ int board_late_init(void) > panic("Cannot init cros-ec device"); > return -1; > } > + > + printf("Boot device: MMC(%u)\n", mmcbootdev); > + sprintf(mmcbootdev_str, "%u", mmcbootdev); > + env_set("mmcbootdev", mmcbootdev_str); > + > return 0; > } > #endif > @@ -359,3 +382,8 @@ int board_usb_cleanup(int index, enum usb_init_type init) > #endif > return 0; > } > + > +int mmc_get_env_dev(void) > +{ > + return get_boot_mmc_dev(); > +} > diff --git a/configs/odroid-xu3_defconfig b/configs/odroid-xu3_defconfig > index 20038d4197..2e982e1b53 100644 > --- a/configs/odroid-xu3_defconfig > +++ b/configs/odroid-xu3_defconfig > @@ -14,6 +14,7 @@ CONFIG_FIT_BEST_MATCH=y > CONFIG_SILENT_CONSOLE=y > CONFIG_CONSOLE_MUX=y > CONFIG_MISC_INIT_R=y > +CONFIG_BOARD_LATE_INIT=y Is it a related change? > # CONFIG_DISPLAY_BOARDINFO is not set > CONFIG_DISPLAY_BOARDINFO_LATE=y > CONFIG_BOARD_TYPES=y > diff --git a/configs/odroid_defconfig b/configs/odroid_defconfig > index be914e4caf..e4392e477e 100644 > --- a/configs/odroid_defconfig > +++ b/configs/odroid_defconfig > @@ -17,6 +17,7 @@ CONFIG_BOOTARGS="Please use defined boot" > CONFIG_SYS_CONSOLE_IS_IN_ENV=y > CONFIG_SYS_CONSOLE_INFO_QUIET=y > CONFIG_MISC_INIT_R=y > +CONFIG_BOARD_LATE_INIT=y > CONFIG_BOARD_TYPES=y > CONFIG_SYS_PROMPT="Odroid # " > # CONFIG_CMD_XIMG is not set > Thanks, Minkyu Kang.
Hi Minkyu, On 23.01.2020 08:09, Minkyu Kang wrote: > On 17/01/2020 22:02, Marek Szyprowski wrote: >> XOM pins provide information for iROM bootloader about the boot device. >> Those pins are mapped to lower bits of OP_MODE register (0x10000008), >> which is common for all Exynos SoC variants. Set the default MMC device id >> to reflect the boot device selected by XOM[7:5] pins (2 for the SD or 0 for >> the eMMC). >> >> Signed-off-by: Marek Szyprowski <m.szyprowski at samsung.com> >> --- >> v2: >> - store mmc boot device to ${mmcbootdev} env >> - print information about boot mmc device >> --- >> arch/arm/mach-exynos/include/mach/cpu.h | 1 + >> board/samsung/common/board.c | 28 +++++++++++++++++++++++++ >> configs/odroid-xu3_defconfig | 1 + >> configs/odroid_defconfig | 1 + >> 4 files changed, 31 insertions(+) >> >> diff --git a/arch/arm/mach-exynos/include/mach/cpu.h b/arch/arm/mach-exynos/include/mach/cpu.h >> index 766edeeb29..fb5fdaf3ba 100644 >> --- a/arch/arm/mach-exynos/include/mach/cpu.h >> +++ b/arch/arm/mach-exynos/include/mach/cpu.h >> @@ -17,6 +17,7 @@ >> >> #define EXYNOS4_GPIO_PART3_BASE 0x03860000 >> #define EXYNOS4_PRO_ID 0x10000000 >> +#define EXYNOS4_OP_MODE 0x10000008 >> #define EXYNOS4_SYSREG_BASE 0x10010000 >> #define EXYNOS4_POWER_BASE 0x10020000 >> #define EXYNOS4_SWRESET 0x10020400 >> diff --git a/board/samsung/common/board.c b/board/samsung/common/board.c >> index ee2fc7971e..cb94ced54e 100644 >> --- a/board/samsung/common/board.c >> +++ b/board/samsung/common/board.c >> @@ -24,6 +24,8 @@ >> #include <asm/arch/sromc.h> >> #include <lcd.h> >> #include <i2c.h> >> +#include <mmc.h> >> +#include <stdio_dev.h> >> #include <usb.h> >> #include <dwc3-uboot.h> >> #include <samsung/misc.h> >> @@ -42,6 +44,20 @@ __weak int exynos_power_init(void) >> return 0; >> } >> >> +/** >> + * get_boot_mmc_dev() - read boot MMC device id from XOM[7:5] pins. >> + */ >> +static int get_boot_mmc_dev(void) >> +{ >> + u32 mode = readl(EXYNOS4_OP_MODE) & 0x1C; >> + >> + if (mode == 0x04) >> + return 2; /* MMC2: SD */ >> + >> + /* MMC0: eMMC or unknown */ >> + return 0; >> +} >> + >> #if defined CONFIG_EXYNOS_TMU >> /* Boot Time Thermal Analysis for SoC temperature threshold breach */ >> static void boot_temp_check(void) >> @@ -280,6 +296,8 @@ int board_late_init(void) >> { >> struct udevice *dev; >> int ret; >> + int mmcbootdev = get_boot_mmc_dev(); >> + char mmcbootdev_str[16]; >> >> stdio_print_current_devices(); >> ret = uclass_first_device_err(UCLASS_CROS_EC, &dev); >> @@ -292,6 +310,11 @@ int board_late_init(void) >> panic("Cannot init cros-ec device"); >> return -1; >> } >> + >> + printf("Boot device: MMC(%u)\n", mmcbootdev); >> + sprintf(mmcbootdev_str, "%u", mmcbootdev); >> + env_set("mmcbootdev", mmcbootdev_str); >> + >> return 0; >> } >> #endif >> @@ -359,3 +382,8 @@ int board_usb_cleanup(int index, enum usb_init_type init) >> #endif >> return 0; >> } >> + >> +int mmc_get_env_dev(void) >> +{ >> + return get_boot_mmc_dev(); >> +} >> diff --git a/configs/odroid-xu3_defconfig b/configs/odroid-xu3_defconfig >> index 20038d4197..2e982e1b53 100644 >> --- a/configs/odroid-xu3_defconfig >> +++ b/configs/odroid-xu3_defconfig >> @@ -14,6 +14,7 @@ CONFIG_FIT_BEST_MATCH=y >> CONFIG_SILENT_CONSOLE=y >> CONFIG_CONSOLE_MUX=y >> CONFIG_MISC_INIT_R=y >> +CONFIG_BOARD_LATE_INIT=y > Is it a related change? Yes, it is needed to enable the code added to board_late_init() function. >> # CONFIG_DISPLAY_BOARDINFO is not set >> CONFIG_DISPLAY_BOARDINFO_LATE=y >> CONFIG_BOARD_TYPES=y >> diff --git a/configs/odroid_defconfig b/configs/odroid_defconfig >> index be914e4caf..e4392e477e 100644 >> --- a/configs/odroid_defconfig >> +++ b/configs/odroid_defconfig >> @@ -17,6 +17,7 @@ CONFIG_BOOTARGS="Please use defined boot" >> CONFIG_SYS_CONSOLE_IS_IN_ENV=y >> CONFIG_SYS_CONSOLE_INFO_QUIET=y >> CONFIG_MISC_INIT_R=y >> +CONFIG_BOARD_LATE_INIT=y >> CONFIG_BOARD_TYPES=y >> CONFIG_SYS_PROMPT="Odroid # " >> # CONFIG_CMD_XIMG is not set Best regards
Hi! On 23/01/2020 16:20, Marek Szyprowski wrote: > Hi Minkyu, > > On 23.01.2020 08:09, Minkyu Kang wrote: >> On 17/01/2020 22:02, Marek Szyprowski wrote: >>> XOM pins provide information for iROM bootloader about the boot device. >>> Those pins are mapped to lower bits of OP_MODE register (0x10000008), >>> which is common for all Exynos SoC variants. Set the default MMC device id >>> to reflect the boot device selected by XOM[7:5] pins (2 for the SD or 0 for >>> the eMMC). >>> >>> Signed-off-by: Marek Szyprowski <m.szyprowski at samsung.com> >>> --- >>> v2: >>> - store mmc boot device to ${mmcbootdev} env >>> - print information about boot mmc device >>> --- >>> arch/arm/mach-exynos/include/mach/cpu.h | 1 + >>> board/samsung/common/board.c | 28 +++++++++++++++++++++++++ >>> configs/odroid-xu3_defconfig | 1 + >>> configs/odroid_defconfig | 1 + >>> 4 files changed, 31 insertions(+) >>> >>> diff --git a/arch/arm/mach-exynos/include/mach/cpu.h b/arch/arm/mach-exynos/include/mach/cpu.h >>> index 766edeeb29..fb5fdaf3ba 100644 >>> --- a/arch/arm/mach-exynos/include/mach/cpu.h >>> +++ b/arch/arm/mach-exynos/include/mach/cpu.h >>> @@ -17,6 +17,7 @@ >>> >>> #define EXYNOS4_GPIO_PART3_BASE 0x03860000 >>> #define EXYNOS4_PRO_ID 0x10000000 >>> +#define EXYNOS4_OP_MODE 0x10000008 >>> #define EXYNOS4_SYSREG_BASE 0x10010000 >>> #define EXYNOS4_POWER_BASE 0x10020000 >>> #define EXYNOS4_SWRESET 0x10020400 >>> diff --git a/board/samsung/common/board.c b/board/samsung/common/board.c >>> index ee2fc7971e..cb94ced54e 100644 >>> --- a/board/samsung/common/board.c >>> +++ b/board/samsung/common/board.c >>> @@ -24,6 +24,8 @@ >>> #include <asm/arch/sromc.h> >>> #include <lcd.h> >>> #include <i2c.h> >>> +#include <mmc.h> >>> +#include <stdio_dev.h> >>> #include <usb.h> >>> #include <dwc3-uboot.h> >>> #include <samsung/misc.h> >>> @@ -42,6 +44,20 @@ __weak int exynos_power_init(void) >>> return 0; >>> } >>> >>> +/** >>> + * get_boot_mmc_dev() - read boot MMC device id from XOM[7:5] pins. >>> + */ >>> +static int get_boot_mmc_dev(void) >>> +{ >>> + u32 mode = readl(EXYNOS4_OP_MODE) & 0x1C; >>> + >>> + if (mode == 0x04) >>> + return 2; /* MMC2: SD */ >>> + >>> + /* MMC0: eMMC or unknown */ >>> + return 0; >>> +} >>> + >>> #if defined CONFIG_EXYNOS_TMU >>> /* Boot Time Thermal Analysis for SoC temperature threshold breach */ >>> static void boot_temp_check(void) >>> @@ -280,6 +296,8 @@ int board_late_init(void) >>> { >>> struct udevice *dev; >>> int ret; >>> + int mmcbootdev = get_boot_mmc_dev(); >>> + char mmcbootdev_str[16]; >>> >>> stdio_print_current_devices(); >>> ret = uclass_first_device_err(UCLASS_CROS_EC, &dev); >>> @@ -292,6 +310,11 @@ int board_late_init(void) >>> panic("Cannot init cros-ec device"); >>> return -1; >>> } >>> + >>> + printf("Boot device: MMC(%u)\n", mmcbootdev); >>> + sprintf(mmcbootdev_str, "%u", mmcbootdev); >>> + env_set("mmcbootdev", mmcbootdev_str); >>> + >>> return 0; >>> } >>> #endif >>> @@ -359,3 +382,8 @@ int board_usb_cleanup(int index, enum usb_init_type init) >>> #endif >>> return 0; >>> } >>> + >>> +int mmc_get_env_dev(void) >>> +{ >>> + return get_boot_mmc_dev(); >>> +} >>> diff --git a/configs/odroid-xu3_defconfig b/configs/odroid-xu3_defconfig >>> index 20038d4197..2e982e1b53 100644 >>> --- a/configs/odroid-xu3_defconfig >>> +++ b/configs/odroid-xu3_defconfig >>> @@ -14,6 +14,7 @@ CONFIG_FIT_BEST_MATCH=y >>> CONFIG_SILENT_CONSOLE=y >>> CONFIG_CONSOLE_MUX=y >>> CONFIG_MISC_INIT_R=y >>> +CONFIG_BOARD_LATE_INIT=y >> Is it a related change? > > Yes, it is needed to enable the code added to board_late_init() function. I mean, is your changes should located to board_late_init? > >>> # CONFIG_DISPLAY_BOARDINFO is not set >>> CONFIG_DISPLAY_BOARDINFO_LATE=y >>> CONFIG_BOARD_TYPES=y >>> diff --git a/configs/odroid_defconfig b/configs/odroid_defconfig >>> index be914e4caf..e4392e477e 100644 >>> --- a/configs/odroid_defconfig >>> +++ b/configs/odroid_defconfig >>> @@ -17,6 +17,7 @@ CONFIG_BOOTARGS="Please use defined boot" >>> CONFIG_SYS_CONSOLE_IS_IN_ENV=y >>> CONFIG_SYS_CONSOLE_INFO_QUIET=y >>> CONFIG_MISC_INIT_R=y >>> +CONFIG_BOARD_LATE_INIT=y >>> CONFIG_BOARD_TYPES=y >>> CONFIG_SYS_PROMPT="Odroid # " >>> # CONFIG_CMD_XIMG is not set > > Best regards > Thanks, Minkyu Kang.
Hi On 23.01.2020 08:33, Minkyu Kang wrote: > On 23/01/2020 16:20, Marek Szyprowski wrote: >> On 23.01.2020 08:09, Minkyu Kang wrote: >>> On 17/01/2020 22:02, Marek Szyprowski wrote: >>>> XOM pins provide information for iROM bootloader about the boot device. >>>> Those pins are mapped to lower bits of OP_MODE register (0x10000008), >>>> which is common for all Exynos SoC variants. Set the default MMC device id >>>> to reflect the boot device selected by XOM[7:5] pins (2 for the SD or 0 for >>>> the eMMC). >>>> >>>> Signed-off-by: Marek Szyprowski <m.szyprowski at samsung.com> >>>> --- >>>> v2: >>>> - store mmc boot device to ${mmcbootdev} env >>>> - print information about boot mmc device >>>> --- >>>> arch/arm/mach-exynos/include/mach/cpu.h | 1 + >>>> board/samsung/common/board.c | 28 +++++++++++++++++++++++++ >>>> configs/odroid-xu3_defconfig | 1 + >>>> configs/odroid_defconfig | 1 + >>>> 4 files changed, 31 insertions(+) >>>> >>>> diff --git a/arch/arm/mach-exynos/include/mach/cpu.h b/arch/arm/mach-exynos/include/mach/cpu.h >>>> index 766edeeb29..fb5fdaf3ba 100644 >>>> --- a/arch/arm/mach-exynos/include/mach/cpu.h >>>> +++ b/arch/arm/mach-exynos/include/mach/cpu.h >>>> @@ -17,6 +17,7 @@ >>>> >>>> #define EXYNOS4_GPIO_PART3_BASE 0x03860000 >>>> #define EXYNOS4_PRO_ID 0x10000000 >>>> +#define EXYNOS4_OP_MODE 0x10000008 >>>> #define EXYNOS4_SYSREG_BASE 0x10010000 >>>> #define EXYNOS4_POWER_BASE 0x10020000 >>>> #define EXYNOS4_SWRESET 0x10020400 >>>> diff --git a/board/samsung/common/board.c b/board/samsung/common/board.c >>>> index ee2fc7971e..cb94ced54e 100644 >>>> --- a/board/samsung/common/board.c >>>> +++ b/board/samsung/common/board.c >>>> @@ -24,6 +24,8 @@ >>>> #include <asm/arch/sromc.h> >>>> #include <lcd.h> >>>> #include <i2c.h> >>>> +#include <mmc.h> >>>> +#include <stdio_dev.h> >>>> #include <usb.h> >>>> #include <dwc3-uboot.h> >>>> #include <samsung/misc.h> >>>> @@ -42,6 +44,20 @@ __weak int exynos_power_init(void) >>>> return 0; >>>> } >>>> >>>> +/** >>>> + * get_boot_mmc_dev() - read boot MMC device id from XOM[7:5] pins. >>>> + */ >>>> +static int get_boot_mmc_dev(void) >>>> +{ >>>> + u32 mode = readl(EXYNOS4_OP_MODE) & 0x1C; >>>> + >>>> + if (mode == 0x04) >>>> + return 2; /* MMC2: SD */ >>>> + >>>> + /* MMC0: eMMC or unknown */ >>>> + return 0; >>>> +} >>>> + >>>> #if defined CONFIG_EXYNOS_TMU >>>> /* Boot Time Thermal Analysis for SoC temperature threshold breach */ >>>> static void boot_temp_check(void) >>>> @@ -280,6 +296,8 @@ int board_late_init(void) >>>> { >>>> struct udevice *dev; >>>> int ret; >>>> + int mmcbootdev = get_boot_mmc_dev(); >>>> + char mmcbootdev_str[16]; >>>> >>>> stdio_print_current_devices(); >>>> ret = uclass_first_device_err(UCLASS_CROS_EC, &dev); >>>> @@ -292,6 +310,11 @@ int board_late_init(void) >>>> panic("Cannot init cros-ec device"); >>>> return -1; >>>> } >>>> + >>>> + printf("Boot device: MMC(%u)\n", mmcbootdev); >>>> + sprintf(mmcbootdev_str, "%u", mmcbootdev); >>>> + env_set("mmcbootdev", mmcbootdev_str); >>>> + >>>> return 0; >>>> } >>>> #endif >>>> @@ -359,3 +382,8 @@ int board_usb_cleanup(int index, enum usb_init_type init) >>>> #endif >>>> return 0; >>>> } >>>> + >>>> +int mmc_get_env_dev(void) >>>> +{ >>>> + return get_boot_mmc_dev(); >>>> +} >>>> diff --git a/configs/odroid-xu3_defconfig b/configs/odroid-xu3_defconfig >>>> index 20038d4197..2e982e1b53 100644 >>>> --- a/configs/odroid-xu3_defconfig >>>> +++ b/configs/odroid-xu3_defconfig >>>> @@ -14,6 +14,7 @@ CONFIG_FIT_BEST_MATCH=y >>>> CONFIG_SILENT_CONSOLE=y >>>> CONFIG_CONSOLE_MUX=y >>>> CONFIG_MISC_INIT_R=y >>>> +CONFIG_BOARD_LATE_INIT=y >>> Is it a related change? >> Yes, it is needed to enable the code added to board_late_init() function. > I mean, is your changes should located to board_late_init? Setting mmcbootdev env is being done in board_late_init() (see the diff a few lines above), so to make it working, one has to enable CONFIG_BOARD_LATE_INIT. >>>> # CONFIG_DISPLAY_BOARDINFO is not set >>>> CONFIG_DISPLAY_BOARDINFO_LATE=y >>>> CONFIG_BOARD_TYPES=y >>>> diff --git a/configs/odroid_defconfig b/configs/odroid_defconfig >>>> index be914e4caf..e4392e477e 100644 >>>> --- a/configs/odroid_defconfig >>>> +++ b/configs/odroid_defconfig >>>> @@ -17,6 +17,7 @@ CONFIG_BOOTARGS="Please use defined boot" >>>> CONFIG_SYS_CONSOLE_IS_IN_ENV=y >>>> CONFIG_SYS_CONSOLE_INFO_QUIET=y >>>> CONFIG_MISC_INIT_R=y >>>> +CONFIG_BOARD_LATE_INIT=y >>>> CONFIG_BOARD_TYPES=y >>>> CONFIG_SYS_PROMPT="Odroid # " >>>> # CONFIG_CMD_XIMG is not set >>>> Best regards
On 23/01/2020 16:39, Marek Szyprowski wrote: > Hi > > On 23.01.2020 08:33, Minkyu Kang wrote: >> On 23/01/2020 16:20, Marek Szyprowski wrote: >>> On 23.01.2020 08:09, Minkyu Kang wrote: >>>> On 17/01/2020 22:02, Marek Szyprowski wrote: >>>>> XOM pins provide information for iROM bootloader about the boot device. >>>>> Those pins are mapped to lower bits of OP_MODE register (0x10000008), >>>>> which is common for all Exynos SoC variants. Set the default MMC device id >>>>> to reflect the boot device selected by XOM[7:5] pins (2 for the SD or 0 for >>>>> the eMMC). >>>>> >>>>> Signed-off-by: Marek Szyprowski <m.szyprowski at samsung.com> >>>>> --- >>>>> v2: >>>>> - store mmc boot device to ${mmcbootdev} env >>>>> - print information about boot mmc device >>>>> --- >>>>> arch/arm/mach-exynos/include/mach/cpu.h | 1 + >>>>> board/samsung/common/board.c | 28 +++++++++++++++++++++++++ >>>>> configs/odroid-xu3_defconfig | 1 + >>>>> configs/odroid_defconfig | 1 + >>>>> 4 files changed, 31 insertions(+) >>>>> >>>>> diff --git a/arch/arm/mach-exynos/include/mach/cpu.h b/arch/arm/mach-exynos/include/mach/cpu.h >>>>> index 766edeeb29..fb5fdaf3ba 100644 >>>>> --- a/arch/arm/mach-exynos/include/mach/cpu.h >>>>> +++ b/arch/arm/mach-exynos/include/mach/cpu.h >>>>> @@ -17,6 +17,7 @@ >>>>> >>>>> #define EXYNOS4_GPIO_PART3_BASE 0x03860000 >>>>> #define EXYNOS4_PRO_ID 0x10000000 >>>>> +#define EXYNOS4_OP_MODE 0x10000008 >>>>> #define EXYNOS4_SYSREG_BASE 0x10010000 >>>>> #define EXYNOS4_POWER_BASE 0x10020000 >>>>> #define EXYNOS4_SWRESET 0x10020400 >>>>> diff --git a/board/samsung/common/board.c b/board/samsung/common/board.c >>>>> index ee2fc7971e..cb94ced54e 100644 >>>>> --- a/board/samsung/common/board.c >>>>> +++ b/board/samsung/common/board.c >>>>> @@ -24,6 +24,8 @@ >>>>> #include <asm/arch/sromc.h> >>>>> #include <lcd.h> >>>>> #include <i2c.h> >>>>> +#include <mmc.h> >>>>> +#include <stdio_dev.h> >>>>> #include <usb.h> >>>>> #include <dwc3-uboot.h> >>>>> #include <samsung/misc.h> >>>>> @@ -42,6 +44,20 @@ __weak int exynos_power_init(void) >>>>> return 0; >>>>> } >>>>> >>>>> +/** >>>>> + * get_boot_mmc_dev() - read boot MMC device id from XOM[7:5] pins. >>>>> + */ >>>>> +static int get_boot_mmc_dev(void) >>>>> +{ >>>>> + u32 mode = readl(EXYNOS4_OP_MODE) & 0x1C; >>>>> + >>>>> + if (mode == 0x04) >>>>> + return 2; /* MMC2: SD */ >>>>> + >>>>> + /* MMC0: eMMC or unknown */ >>>>> + return 0; >>>>> +} >>>>> + >>>>> #if defined CONFIG_EXYNOS_TMU >>>>> /* Boot Time Thermal Analysis for SoC temperature threshold breach */ >>>>> static void boot_temp_check(void) >>>>> @@ -280,6 +296,8 @@ int board_late_init(void) >>>>> { >>>>> struct udevice *dev; >>>>> int ret; >>>>> + int mmcbootdev = get_boot_mmc_dev(); >>>>> + char mmcbootdev_str[16]; >>>>> >>>>> stdio_print_current_devices(); >>>>> ret = uclass_first_device_err(UCLASS_CROS_EC, &dev); >>>>> @@ -292,6 +310,11 @@ int board_late_init(void) >>>>> panic("Cannot init cros-ec device"); >>>>> return -1; >>>>> } >>>>> + >>>>> + printf("Boot device: MMC(%u)\n", mmcbootdev); >>>>> + sprintf(mmcbootdev_str, "%u", mmcbootdev); >>>>> + env_set("mmcbootdev", mmcbootdev_str); >>>>> + >>>>> return 0; >>>>> } >>>>> #endif >>>>> @@ -359,3 +382,8 @@ int board_usb_cleanup(int index, enum usb_init_type init) >>>>> #endif >>>>> return 0; >>>>> } >>>>> + >>>>> +int mmc_get_env_dev(void) >>>>> +{ >>>>> + return get_boot_mmc_dev(); >>>>> +} >>>>> diff --git a/configs/odroid-xu3_defconfig b/configs/odroid-xu3_defconfig >>>>> index 20038d4197..2e982e1b53 100644 >>>>> --- a/configs/odroid-xu3_defconfig >>>>> +++ b/configs/odroid-xu3_defconfig >>>>> @@ -14,6 +14,7 @@ CONFIG_FIT_BEST_MATCH=y >>>>> CONFIG_SILENT_CONSOLE=y >>>>> CONFIG_CONSOLE_MUX=y >>>>> CONFIG_MISC_INIT_R=y >>>>> +CONFIG_BOARD_LATE_INIT=y >>>> Is it a related change? >>> Yes, it is needed to enable the code added to board_late_init() function. >> I mean, is your changes should located to board_late_init? > > Setting mmcbootdev env is being done in board_late_init() (see the diff > a few lines above), so to make it working, one has to enable > CONFIG_BOARD_LATE_INIT. > >>>>> # CONFIG_DISPLAY_BOARDINFO is not set >>>>> CONFIG_DISPLAY_BOARDINFO_LATE=y >>>>> CONFIG_BOARD_TYPES=y >>>>> diff --git a/configs/odroid_defconfig b/configs/odroid_defconfig >>>>> index be914e4caf..e4392e477e 100644 >>>>> --- a/configs/odroid_defconfig >>>>> +++ b/configs/odroid_defconfig >>>>> @@ -17,6 +17,7 @@ CONFIG_BOOTARGS="Please use defined boot" >>>>> CONFIG_SYS_CONSOLE_IS_IN_ENV=y >>>>> CONFIG_SYS_CONSOLE_INFO_QUIET=y >>>>> CONFIG_MISC_INIT_R=y >>>>> +CONFIG_BOARD_LATE_INIT=y >>>>> CONFIG_BOARD_TYPES=y >>>>> CONFIG_SYS_PROMPT="Odroid # " >>>>> # CONFIG_CMD_XIMG is not set >>>>> > Best regards > applied to u-boot-samsung. Thanks, Minkyu Kang.
diff --git a/arch/arm/mach-exynos/include/mach/cpu.h b/arch/arm/mach-exynos/include/mach/cpu.h index 766edeeb29..fb5fdaf3ba 100644 --- a/arch/arm/mach-exynos/include/mach/cpu.h +++ b/arch/arm/mach-exynos/include/mach/cpu.h @@ -17,6 +17,7 @@ #define EXYNOS4_GPIO_PART3_BASE 0x03860000 #define EXYNOS4_PRO_ID 0x10000000 +#define EXYNOS4_OP_MODE 0x10000008 #define EXYNOS4_SYSREG_BASE 0x10010000 #define EXYNOS4_POWER_BASE 0x10020000 #define EXYNOS4_SWRESET 0x10020400 diff --git a/board/samsung/common/board.c b/board/samsung/common/board.c index ee2fc7971e..cb94ced54e 100644 --- a/board/samsung/common/board.c +++ b/board/samsung/common/board.c @@ -24,6 +24,8 @@ #include <asm/arch/sromc.h> #include <lcd.h> #include <i2c.h> +#include <mmc.h> +#include <stdio_dev.h> #include <usb.h> #include <dwc3-uboot.h> #include <samsung/misc.h> @@ -42,6 +44,20 @@ __weak int exynos_power_init(void) return 0; } +/** + * get_boot_mmc_dev() - read boot MMC device id from XOM[7:5] pins. + */ +static int get_boot_mmc_dev(void) +{ + u32 mode = readl(EXYNOS4_OP_MODE) & 0x1C; + + if (mode == 0x04) + return 2; /* MMC2: SD */ + + /* MMC0: eMMC or unknown */ + return 0; +} + #if defined CONFIG_EXYNOS_TMU /* Boot Time Thermal Analysis for SoC temperature threshold breach */ static void boot_temp_check(void) @@ -280,6 +296,8 @@ int board_late_init(void) { struct udevice *dev; int ret; + int mmcbootdev = get_boot_mmc_dev(); + char mmcbootdev_str[16]; stdio_print_current_devices(); ret = uclass_first_device_err(UCLASS_CROS_EC, &dev); @@ -292,6 +310,11 @@ int board_late_init(void) panic("Cannot init cros-ec device"); return -1; } + + printf("Boot device: MMC(%u)\n", mmcbootdev); + sprintf(mmcbootdev_str, "%u", mmcbootdev); + env_set("mmcbootdev", mmcbootdev_str); + return 0; } #endif @@ -359,3 +382,8 @@ int board_usb_cleanup(int index, enum usb_init_type init) #endif return 0; } + +int mmc_get_env_dev(void) +{ + return get_boot_mmc_dev(); +} diff --git a/configs/odroid-xu3_defconfig b/configs/odroid-xu3_defconfig index 20038d4197..2e982e1b53 100644 --- a/configs/odroid-xu3_defconfig +++ b/configs/odroid-xu3_defconfig @@ -14,6 +14,7 @@ CONFIG_FIT_BEST_MATCH=y CONFIG_SILENT_CONSOLE=y CONFIG_CONSOLE_MUX=y CONFIG_MISC_INIT_R=y +CONFIG_BOARD_LATE_INIT=y # CONFIG_DISPLAY_BOARDINFO is not set CONFIG_DISPLAY_BOARDINFO_LATE=y CONFIG_BOARD_TYPES=y diff --git a/configs/odroid_defconfig b/configs/odroid_defconfig index be914e4caf..e4392e477e 100644 --- a/configs/odroid_defconfig +++ b/configs/odroid_defconfig @@ -17,6 +17,7 @@ CONFIG_BOOTARGS="Please use defined boot" CONFIG_SYS_CONSOLE_IS_IN_ENV=y CONFIG_SYS_CONSOLE_INFO_QUIET=y CONFIG_MISC_INIT_R=y +CONFIG_BOARD_LATE_INIT=y CONFIG_BOARD_TYPES=y CONFIG_SYS_PROMPT="Odroid # " # CONFIG_CMD_XIMG is not set
XOM pins provide information for iROM bootloader about the boot device. Those pins are mapped to lower bits of OP_MODE register (0x10000008), which is common for all Exynos SoC variants. Set the default MMC device id to reflect the boot device selected by XOM[7:5] pins (2 for the SD or 0 for the eMMC). Signed-off-by: Marek Szyprowski <m.szyprowski at samsung.com> --- v2: - store mmc boot device to ${mmcbootdev} env - print information about boot mmc device --- arch/arm/mach-exynos/include/mach/cpu.h | 1 + board/samsung/common/board.c | 28 +++++++++++++++++++++++++ configs/odroid-xu3_defconfig | 1 + configs/odroid_defconfig | 1 + 4 files changed, 31 insertions(+)