LKML Archive on
help / color / mirror / Atom feed
From: Anand Moon <>
To: Martin Blumenstingl <>
Cc: Kevin Hilman <>,
	Rob Herring <>,
	Mark Rutland <>,
	Neil Armstrong <>,
	Jerome Brunet <>,
	Michael Turquette <>,
	Stephen Boyd <>,
	devicetree <>,
	linux-arm-kernel <>,,
	Linux Kernel <>,
	"open list:COMMON CLK FRAMEWORK" <>
Subject: Re: [PATCHv2 2/2] clk: meson: g12a: set cpub_clk flags to CLK_IS_CRITICAL
Date: Fri, 20 Mar 2020 12:12:43 +0530	[thread overview]
Message-ID: <> (raw)
In-Reply-To: <>

[-- Attachment #1: Type: text/plain, Size: 2033 bytes --]

Hi Martin / Kevin,

On Fri, 20 Mar 2020 at 05:09, Martin Blumenstingl
<> wrote:
> Hi Kevin,
> On Mon, Mar 2, 2020 at 6:01 PM Kevin Hilman <> wrote:
> [...]
> > > updating flags to CLK_IS_CRITICAL which help enable all the parent for
> > > cpub_clk.
> >
> > With current mainline, I've tested DVFS using CPUfreq on both clusters
> > on odroid-n2, and both clusters are booting, so I don't understand the
> > need for this patch.
> I *think* there is a race condition at kernel boot between cpufreq and
> disabling orphaned clocks
> I'm not sure I fully understand it though and I don't have any G12B
> board to verify it
> my understanding is that u-boot runs Linux off CPU0 which is clocked by cpub_clk
> this means we need to keep cpub_clk enabled as long as Linux wants the
> CPU0 processor to be enabled (on 32-bit ARM platforms that would be
> smp_operations.cpu_{kill,die})
> cpufreq does not call clk_prepare_enable on the CPU clocks so this
> means that the orphaned clock cleanup mechanism can disable it "at any
> time", killing everything running on CPU0 and CPU1 (which are both
> clocked by cpub_clk)
> I have no explanation why this depends on booting from SD or eMMC.
> for the 32-bit SoCs we have CLK_IS_CRITICAL on the CPU clock as well
> since commit 0dad1ec65bc30a
> on G12A we have CLK_IS_CRITICAL on the sys_pll clocks, however my
> understanding is that cpub_clk could also be fed by one of the
> fixed_pll derived clocks (which have a gate as well, which may or may
> not be turned off by the orphaned clock cleanup - that is pure
> speculation from my side though).
> Martin

Thanks for this new input I will carefully check these details once again.

I am attaching small scripts on how I build the image with mainline
u-boot and mainline kernel.
So I am able to reproduce this issue on SD card.
Hoping some body could reproduce this issue at their end and share the feedback.
If their is some issue from my side please let me know.


[-- Attachment #2: build_odroidn2.txt --]
[-- Type: text/plain, Size: 6874 bytes --]

Step 1 : Script to build the prepare the image.
#!/bin/bash +x


if [ -b "$FILE" ]; then
        export DISK=/dev/mmcblk0
        sudo sudo wipefs -a ${DISK}p1
        sudo dd if=/dev/zero of=${DISK} bs=1M count=512

        sudo sfdisk ${DISK} <<-__EOF__

        sudo mkfs.ext4 ${DISK}p1

        sudo mount ${DISK}p1 root
        sudo bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C root

        # create custom boot.scr
        mkimage -A arm -O linux -T script -C none -n "Arch U-Boot boot script Odroid N2" -d boot-odroidn2.txt boot.scr
        sudo cp -v boot.scr     root/boot/
        sudo umount root
        echo "$FILE does not exist"

my boot-odroidn2.txt converted to boot.scr
# After modifying, run ./mkscr

test -n "${distro_bootpart}" || setenv distro_bootpart 1
part uuid ${devtype} ${devnum}:${distro_bootpart} uuid
setenv bootargs "console=ttyAML0,115200n8 root=PARTUUID=${uuid} rw rootwait earlycon no_console_suspend"

if load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} /boot/Image; then
  if load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} /boot/dtbs/${fdtfile}; then
    if load ${devtype} ${devnum}:${distro_bootpart} ${ramdisk_addr_r} /boot/initramfs-linux.img; then
      booti ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r};
      booti ${kernel_addr_r} - ${fdt_addr_r};

Step 2: Build and flash the mainline u-boot to the sdcard / eMMC.
set +x

# U-Boot for ODROID-N2
rm u-boot-n2/fip/

git clone u-boot-n2
cd u-boot-n2

# u-boot compilation
# ==================

git pull origin master
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make distclean
make odroid-n2_defconfig all

# ==============
cd ..
tar xvfJ gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz
tar xvfJ gcc-linaro-arm-none-eabi-4.8-2013.11_linux.tar.xz
export PATH=$PWD/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux/bin:$PWD/gcc-linaro-arm-none-eabi-4.8-2013.11_linux/bin:$PATH

git clone --depth 1 \ -b odroidn2-v2015.01 \

cd odroid-n2
git pull origin master
make distclean
make odroidn2_defconfig

# Go back to mainline U-Boot source tree then :
cd ../u-boot-n2
mkdir fip

wget -O fip/
cp -v $UBOOTDIR/build/scp_task/bl301.bin fip/
cp -v $UBOOTDIR/build/board/hardkernel/odroidn2/firmware/acs.bin fip/
cp -v $UBOOTDIR/fip/g12b/bl2.bin fip/
cp -v $UBOOTDIR/fip/g12b/bl30.bin fip/
cp -v $UBOOTDIR/fip/g12b/bl31.img fip/
cp -v $UBOOTDIR/fip/g12b/ddr3_1d.fw fip/
cp -v $UBOOTDIR/fip/g12b/ddr4_1d.fw fip/
cp -v $UBOOTDIR/fip/g12b/ddr4_2d.fw fip/
cp -v $UBOOTDIR/fip/g12b/diag_lpddr4.fw fip/
cp -v $UBOOTDIR/fip/g12b/lpddr4_1d.fw fip/
cp -v $UBOOTDIR/fip/g12b/lpddr4_2d.fw fip/
cp -v $UBOOTDIR/fip/g12b/piei.fw fip/
cp -v $UBOOTDIR/fip/g12b/aml_ddr.fw fip/
cp -v u-boot.bin fip/bl33.bin

bash fip/ \
     fip/bl30.bin \
     fip/zero_tmp \
     fip/bl30_zero.bin \
     fip/bl301.bin \
     fip/bl301_zero.bin \
     fip/bl30_new.bin \

bash fip/ \
     fip/bl2.bin \
     fip/zero_tmp \
     fip/bl2_zero.bin \
     fip/acs.bin \
     fip/bl21_zero.bin \
     fip/bl2_new.bin \

$UBOOTDIR/fip/g12b/aml_encrypt_g12b --bl30sig --input fip/bl30_new.bin \
                                --output fip/bl30_new.bin.g12a.enc \
                                --level v3
$UBOOTDIR/fip/g12b/aml_encrypt_g12b --bl3sig --input fip/bl30_new.bin.g12a.enc \
                                --output fip/bl30_new.bin.enc \
                                --level v3 --type bl30
$UBOOTDIR/fip/g12b/aml_encrypt_g12b --bl3sig --input fip/bl31.img \
                                --output fip/bl31.img.enc \
                                --level v3 --type bl31
$UBOOTDIR/fip/g12b/aml_encrypt_g12b --bl3sig --input fip/bl33.bin --compress lz4 \
                                --output fip/bl33.bin.enc \
                                --level v3 --type bl33 --compress lz4
$UBOOTDIR/fip/g12b/aml_encrypt_g12b --bl2sig --input fip/bl2_new.bin \
                                --output fip/bl2.n.bin.sig
$UBOOTDIR/fip/g12b/aml_encrypt_g12b --bootmk \
        --output fip/u-boot.bin \
        --bl2 fip/bl2.n.bin.sig \
        --bl30 fip/bl30_new.bin.enc \
        --bl31 fip/bl31.img.enc \
        --bl33 fip/bl33.bin.enc \
        --ddrfw1 fip/ddr4_1d.fw \
        --ddrfw2 fip/ddr4_2d.fw \
        --ddrfw3 fip/ddr3_1d.fw \
        --ddrfw4 fip/piei.fw \
        --ddrfw5 fip/lpddr4_1d.fw \
        --ddrfw6 fip/lpddr4_2d.fw \
        --ddrfw7 fip/diag_lpddr4.fw \
        --ddrfw8 fip/aml_ddr.fw \
        --level v3

Step 3: Flash the u-boot image
if [ -b "$FILE" ]; then
        sudo dd if=fip/ of=$DEV conv=fsync,notrunc bs=512 skip=1 seek=1
        sudo dd if=fip/ of=$DEV conv=fsync,notrunc bs=1 count=444
       echo "$FILE does not exist"

With this step you will have working build image to boot the kernel.

Step 4: For closs compile and build the kernel

export GCC_COLORS=auto

make ARCH=arm64 mrproper
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) dtbs Image modules

mkdir -p media
sudo mount /dev/mmcblk0p1 ./media
sudo cp -v arch/arm64/boot/Image ./media/boot/
sudo cp -v arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dtb ./media/boot/dtbs/amlogic/meson-gxbb-odroidc2.dtb
sudo cp -v arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtb ./media/boot/dtbs/amlogic/meson-g12b-odroid-n2.dtb
sudo make ARCH=arm64 LOCALVERSION=-xmlt modules_install INSTALL_MOD_PATH=./media && sync && sudo umount ./media && sudo rm -rf ./media

  reply	other threads:[~2020-03-20  6:42 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-02 12:53 [PATCHv2 0/2] Odroid N2 failes to boot using upstream kernel using microSD card Anand Moon
2020-03-02 12:53 ` [PATCHv2 1/2] arm64: dts: meson: Add missing regulator linked to VDDAO_3V3 regulator to FLASH_VDD Anand Moon
2020-03-02 17:18   ` Kevin Hilman
2020-03-03 14:11     ` Anand Moon
2020-03-02 12:53 ` [PATCHv2 2/2] clk: meson: g12a: set cpub_clk flags to CLK_IS_CRITICAL Anand Moon
2020-03-02 17:01   ` Kevin Hilman
2020-03-03 14:01     ` Anand Moon
2020-03-19 23:39     ` Martin Blumenstingl
2020-03-20  6:42       ` Anand Moon [this message]
2020-03-23  9:03       ` Jerome Brunet

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
    --subject='Re: [PATCHv2 2/2] clk: meson: g12a: set cpub_clk flags to CLK_IS_CRITICAL' \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).