[PATCH v2 00/32] Qualcomm generic board support

Sumit Garg sumit.garg at linaro.org
Thu Jan 11 10:49:58 CET 2024


On Tue, 9 Jan 2024 at 17:03, Caleb Connolly <caleb.connolly at linaro.org> wrote:
>
>
>
> On 09/01/2024 06:07, Sumit Garg wrote:
> > On Fri, 5 Jan 2024 at 19:15, Caleb Connolly <caleb.connolly at linaro.org> wrote:
> >>
> >>
> >>
> >> On 05/01/2024 13:14, Sumit Garg wrote:
> >>> Hi Caleb,
> >>
> >> Hi Sumit,
> >>
> >> [snip]
> >>
> >>>> ---
> >>>> I have tested this series on the Dragonboard410c, Dragonboard820c, and
> >>>
> >>> This series fails to boot (without any U-Boot console print) on
> >>> db410c. I even added below pinctrl change but without any success:
> >>
> >> Are you chainloading from aboot? Or flashing over it?
> >>
> >
> > I am using the default mode where U-Boot acts as the first stage
> > bootloader. I suppose it worked for you since LK enabled drivers which
> > were just reused by U-Boot.
>
> + Stephan, could you maybe give this a try at some point?
>
> Right, although the lack of any output probably indicates that U-Boot
> code isn't getting run for some reason. Could you check if disabling
> LINUX_KERNEL_IMAGE_HEADER (remove the select in arch/arm/Kconfig) helps?
> It was *theorised* that this shouldn't cause any issues but not tested.

So I did:

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 5ed9cbf378f..61192fb4a43 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1077,8 +1077,6 @@ config ARCH_SNAPDRAGON
        select SPMI
        select BOARD_LATE_INIT
        select OF_BOARD
-       select SAVE_PREV_BL_FDT_ADDR
-       select LINUX_KERNEL_IMAGE_HEADER
        imply CMD_DM

 config ARCH_SOCFPGA

But it didn't help.

>
> Oh yeah, you should also hardcode the memory layout in DTS, this got
> lost when moving to upstream DT and it's needed for the case where we
> don't have ABL/LK to fill it in for us.

I see you have still preserved arch/arm/dts/dragonboard410c.dts with
memory layout. I switched to it via:

diff --git a/configs/dragonboard410c_defconfig
b/configs/dragonboard410c_defconfig
index a9a48c2212d..600d614643f 100644
--- a/configs/dragonboard410c_defconfig
+++ b/configs/dragonboard410c_defconfig
@@ -9,7 +9,7 @@ CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
 CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x8007fff0
 CONFIG_ENV_SIZE=0x2000
 CONFIG_ENV_OFFSET=0x0
-CONFIG_DEFAULT_DEVICE_TREE="apq8016-sbc"
+CONFIG_DEFAULT_DEVICE_TREE="dragonboard410c"
 CONFIG_OF_LIBFDT_OVERLAY=y
 CONFIG_IDENT_STRING="\nQualcomm-DragonBoard 410C"
 CONFIG_SYS_LOAD_ADDR=0x80080000

But that didn't help it to boot, still no U-Boot console log.

> >
> >> I have only been able to validate the chainloading method, following the
> >> steps in doc/board/qualcomm/board.rst and generating the config with
> >>
> >> make dragonboard410c_defconfig chainloaded.config
> >>
> >> do you get any output at all?
> >
> > No output from U-Boot. Last prints from SBL1:
> >
> > <snip>
> > D -    299022 - SBL1, Delta
> > S - Flash Throughput, 81000 KB/s  (1537656 Bytes,  18940 us)
> > S - DDR Frequency, 400 MHz
> >
> >> Can you try enabling debug UART output as
> >> documented in doc/board/qualcomm/debugging.rst?
> >
> > I did but it didn't help.
>
> Hmm, I doubt SBL turns off the UART clock, so the DEBUG_UART ought to
> work - but this has not been tested so there could be something missing.
> Maybe you can try calling msm_uart_clk_init() from _debug_uart_init().

The driver model isn't available for DEBUG_UART, so it can directly
invoke msm_uart_clk_init().

> >
> >>
> >> The pinctrl fix shouldn't be needed to boot to a shell.
> >
> > While at it, I noticed another pinctrl issue which should be fixed by
> > following diff:
> >
> > diff --git a/drivers/serial/serial_msm.c b/drivers/serial/serial_msm.c
> > index 0148ddb54df..6fe7bdd1dca 100644
> > --- a/drivers/serial/serial_msm.c
> > +++ b/drivers/serial/serial_msm.c
> > @@ -204,7 +204,7 @@ static int msm_serial_probe(struct udevice *dev)
> >         if (ret)
> >                 return ret;
> >
> > -       pinctrl_select_state(dev, "uart");
> > +       pinctrl_select_state(dev, "default");
> >         uart_dm_init(priv);
> >
> >         return 0;
> >
> > But this still didn't fix the boot problem. As you have the board in
> > your hand, I would suggest you to debug to avoid this back and forth.
>
> I don't have the board unfortunately, only remote access - hence I can
> only debug the chainloaded U-Boot and not "u-boot1st" (or however we
> call it :P). Sorry.

I can help keep digging in but since this series overhauls db410c
support I expected it to be at least tested.

-Sumit

> >
> > -Sumit
> >
> >>
> >> Thanks,
> >>>
> >>> diff --git a/drivers/pinctrl/qcom/pinctrl-apq8016.c
> >>> b/drivers/pinctrl/qcom/pinctrl-apq8016.c
> >>> index 8e698085d78..88518845952 100644
> >>> --- a/drivers/pinctrl/qcom/pinctrl-apq8016.c
> >>> +++ b/drivers/pinctrl/qcom/pinctrl-apq8016.c
> >>> @@ -42,7 +42,7 @@ static const char *apq8016_get_pin_name(struct udevice *dev,
> >>>                                         unsigned int selector)
> >>>  {
> >>>         if (selector < 122) {
> >>> -               snprintf(pin_name, MAX_PIN_NAME_LEN, "GPIO_%u", selector);
> >>> +               snprintf(pin_name, MAX_PIN_NAME_LEN, "gpio%u", selector);
> >>>                 return pin_name;
> >>>         } else {
> >>>                 return msm_pinctrl_pins[selector - 122];
> >>>
> >>>
> >>>> Dragonboard845c. I unfortunately don't have access to a QCS404 EVB board
> >>>> to test.
> >>>
> >>> db820c and qcs404 require a similar pinctrl change though.
> >>>
> >>> -Sumit
> >>>
> >>>>
> >>>> This series is based on the qcom-next branch [1] and depends on my PMIC
> >>>> fixes series [2], an integration branch for testing can be found at [3].
> >>>> The non-qualcomm-specific changes (patches 1 and 2) don't have any
> >>>> dependencies.
> >>>>
> >>>> [1]: https://source.denx.de/u-boot/custodians/u-boot-snapdragon
> >>>> [2]: https://lore.kernel.org/u-boot/20231114-b4-qcom-dt-compat-v3-0-88a92f8f00ba@linaro.org/
> >>>> [3]: https://source.denx.de/u-boot/custodians/u-boot-snapdragon/-/tree/b4/qcom-common-target
> >>>>
> >>>> ---
> >>>> Changes in v2:
> >>>> - Split DTS changes to reduce patch size.
> >>>> - Import full board DTS files from Linux too, and introduce -u-boot.dtsi
> >>>>   files where necessary to make any U-Boot specific changes.
> >>>> - Add a pinctrl driver for qcom PMIC GPIOs
> >>>> - Always enable LINUX_KERNEL_IMAGE_HEADER
> >>>> - Link to v1: https://lore.kernel.org/r/20231121-b4-qcom-common-target-v1-0-9492198e0c15@linaro.org
> >>>>
> >>>> To: Neil Armstrong <neil.armstrong at linaro.org>
> >>>> To: Sumit Garg <sumit.garg at linaro.org>
> >>>> To: Ramon Fried <rfried.dev at gmail.com>
> >>>> Cc: Marek Vasut <marex at denx.de>
> >>>> To: Dzmitry Sankouski <dsankouski at gmail.com>
> >>>> To: Caleb Connolly <caleb.connolly at linaro.org>
> >>>> To: Peng Fan <peng.fan at nxp.com>
> >>>> To: Jaehoon Chung <jh80.chung at samsung.com>
> >>>> To: Rayagonda Kokatanur <rayagonda.kokatanur at broadcom.com>
> >>>> To: Lukasz Majewski <lukma at denx.de>
> >>>> To: Sean Anderson <seanga2 at gmail.com>
> >>>> To: Jorge Ramirez-Ortiz <jorge.ramirez.ortiz at gmail.com>
> >>>> To: Stephan Gerhold <stephan at gerhold.net>
> >>>> Cc:  <u-boot at lists.denx.de>
> >>>>
> >>>> ---
> >>>> Caleb Connolly (32):
> >>>>       arm: init: export prev_bl_fdt_addr
> >>>>       usb: dwc3-generic: support external vbus regulator
> >>>>       mmc: msm_sdhci: use modern clock handling
> >>>>       dt-bindings: drop msm_sdhci binding
> >>>>       clk/qcom: use upstream compatible properties
> >>>>       serial: msm: add debug UART
> >>>>       serial: msm: fix clock handling
> >>>>       gpio: qcom_pmic: 1-based GPIOs
> >>>>       gpio: qcom_pmic: add a quirk to skip GPIO configuration
> >>>>       gpio: qcom_pmic: add pinctrl driver
> >>>>       board: dragonboard410c: add chainloaded config fragment
> >>>>       board: dragonboard410c: upstream DT compat
> >>>>       board: dragonboard410c: import board code from mach-snapdragon
> >>>>       board: dragonboard820c: use LINUX_KERNEL_IMAGE_HEADER
> >>>>       mach-snapdragon: generalise board support
> >>>>       mach-snapdragon: dynamic load addresses
> >>>>       mach-snapdragon: generate fdtfile automatically
> >>>>       doc: board/qualcomm: document generic targets
> >>>>       dt-bindings: import headers for SDM845
> >>>>       dts: sdm845: import supporting dtsi files
> >>>>       dts: sdm845: replace with upstream DTS
> >>>>       dt-bindings: import headers for MSM8916
> >>>>       dts: msm8916: import PMIC dtsi files
> >>>>       dts: msm8916: replace with upstream DTS
> >>>>       dt-bindings: import headers for MSM8996
> >>>>       dts: msm8996: import PMIC dtsi files
> >>>>       dts: dragonboard820c: use correct bindings for clocks
> >>>>       dts: msm8996: replace with upstream DTS
> >>>>       dt-bindings: import headers for qcs404
> >>>>       dts: qcs404-evb: replace with upstream DT
> >>>>       board: qcs404-evb: drop board code
> >>>>       MAINTAINERS: Qualcomm: add some missing paths
> >>>>
> >>>>  MAINTAINERS                                        |   12 +-
> >>>>  arch/arm/Kconfig                                   |    4 +
> >>>>  arch/arm/dts/Makefile                              |    9 +-
> >>>>  arch/arm/dts/apq8016-sbc.dts                       |  729 +++
> >>>>  arch/arm/dts/apq8096-db820c-u-boot.dtsi            |   10 +
> >>>>  arch/arm/dts/apq8096-db820c.dts                    | 1137 ++++
> >>>>  arch/arm/dts/dragonboard410c-uboot.dtsi            |   44 -
> >>>>  arch/arm/dts/dragonboard410c.dts                   |  199 +-
> >>>>  arch/arm/dts/dragonboard820c-uboot.dtsi            |   32 -
> >>>>  arch/arm/dts/dragonboard820c.dts                   |  151 -
> >>>>  arch/arm/dts/dragonboard845c-uboot.dtsi            |   26 -
> >>>>  arch/arm/dts/dragonboard845c.dts                   |   48 -
> >>>>  arch/arm/dts/msm8916-pm8916.dtsi                   |  157 +
> >>>>  arch/arm/dts/msm8916.dtsi                          | 2702 +++++++++
> >>>>  arch/arm/dts/msm8996.dtsi                          | 3884 +++++++++++++
> >>>>  arch/arm/dts/pm8916.dtsi                           |  178 +
> >>>>  arch/arm/dts/pm8994.dtsi                           |  152 +
> >>>>  arch/arm/dts/pm8998.dtsi                           |  130 +
> >>>>  arch/arm/dts/pmi8994.dtsi                          |   65 +
> >>>>  arch/arm/dts/pmi8998.dtsi                          |   98 +
> >>>>  arch/arm/dts/pms405.dtsi                           |  149 +
> >>>>  arch/arm/dts/qcs404-evb-4000-u-boot.dtsi           |   26 +
> >>>>  arch/arm/dts/qcs404-evb-4000.dts                   |   96 +
> >>>>  arch/arm/dts/qcs404-evb-uboot.dtsi                 |   30 -
> >>>>  arch/arm/dts/qcs404-evb.dts                        |  390 --
> >>>>  arch/arm/dts/qcs404-evb.dtsi                       |  389 ++
> >>>>  arch/arm/dts/qcs404.dtsi                           | 1829 ++++++
> >>>>  arch/arm/dts/sdm845-db845c.dts                     | 1190 ++++
> >>>>  .../arm/dts/sdm845-samsung-starqltechn-u-boot.dtsi |   16 +
> >>>>  arch/arm/dts/sdm845-samsung-starqltechn.dts        |  624 +++
> >>>>  arch/arm/dts/sdm845-wcd9340.dtsi                   |   86 +
> >>>>  arch/arm/dts/sdm845.dtsi                           | 5801 +++++++++++++++++++-
> >>>>  arch/arm/dts/starqltechn-uboot.dtsi                |   27 -
> >>>>  arch/arm/dts/starqltechn.dts                       |   68 -
> >>>>  arch/arm/lib/save_prev_bl_data.c                   |    5 +
> >>>>  arch/arm/mach-snapdragon/Kconfig                   |   95 +-
> >>>>  arch/arm/mach-snapdragon/Makefile                  |    8 +-
> >>>>  arch/arm/mach-snapdragon/board.c                   |  304 +
> >>>>  arch/arm/mach-snapdragon/include/mach/dram.h       |   12 -
> >>>>  arch/arm/mach-snapdragon/init_sdm845.c             |   73 -
> >>>>  arch/arm/mach-snapdragon/misc.c                    |   55 -
> >>>>  arch/arm/mach-snapdragon/sysmap-apq8016.c          |   31 -
> >>>>  arch/arm/mach-snapdragon/sysmap-apq8096.c          |   31 -
> >>>>  arch/arm/mach-snapdragon/sysmap-qcs404.c           |   43 -
> >>>>  arch/arm/mach-snapdragon/sysmap-sdm845.c           |   31 -
> >>>>  board/qualcomm/dragonboard410c/Kconfig             |   15 -
> >>>>  board/qualcomm/dragonboard410c/Makefile            |    3 +-
> >>>>  .../dragonboard410c/configs/chainloaded.config     |    7 +
> >>>>  board/qualcomm/dragonboard410c/dragonboard410c.c   |  109 +-
> >>>>  .../qualcomm/dragonboard410c/misc.c                |   51 +-
> >>>>  .../mach => board/qualcomm/dragonboard410c}/misc.h |    1 +
> >>>>  board/qualcomm/dragonboard820c/Kconfig             |   15 -
> >>>>  board/qualcomm/dragonboard820c/Makefile            |    1 -
> >>>>  board/qualcomm/dragonboard820c/dragonboard820c.c   |   39 +-
> >>>>  board/qualcomm/dragonboard820c/head.S              |   33 -
> >>>>  board/qualcomm/dragonboard820c/u-boot.lds          |  111 -
> >>>>  board/qualcomm/dragonboard845c/Kconfig             |   12 -
> >>>>  board/qualcomm/qcs404-evb/Kconfig                  |   15 -
> >>>>  board/qualcomm/qcs404-evb/Makefile                 |    6 -
> >>>>  board/qualcomm/qcs404-evb/qcs404-evb.c             |   62 -
> >>>>  configs/dragonboard410c_defconfig                  |    8 +-
> >>>>  configs/dragonboard820c_defconfig                  |    8 +-
> >>>>  configs/dragonboard845c_defconfig                  |   29 -
> >>>>  configs/qcom_defconfig                             |   73 +
> >>>>  configs/qcs404evb_defconfig                        |   55 -
> >>>>  configs/starqltechn_defconfig                      |   41 -
> >>>>  doc/board/qualcomm/board.rst                       |  119 +
> >>>>  doc/board/qualcomm/debugging.rst                   |   61 +
> >>>>  doc/board/qualcomm/index.rst                       |    4 +-
> >>>>  doc/board/qualcomm/qcs404.rst                      |   79 -
> >>>>  doc/board/qualcomm/sdm845.rst                      |  162 -
> >>>>  doc/device-tree-bindings/mmc/msm_sdhci.txt         |   25 -
> >>>>  doc/device-tree-bindings/usb/ehci-msm.txt          |   10 -
> >>>>  drivers/clk/qcom/clock-apq8016.c                   |    9 +-
> >>>>  drivers/clk/qcom/clock-apq8096.c                   |    7 +-
> >>>>  drivers/gpio/qcom_pmic_gpio.c                      |  232 +-
> >>>>  drivers/mmc/msm_sdhci.c                            |   69 +-
> >>>>  drivers/phy/qcom/msm8916-usbh-phy.c                |    4 +-
> >>>>  drivers/pinctrl/qcom/pinctrl-apq8016.c             |    2 +-
> >>>>  drivers/serial/Kconfig                             |    8 +
> >>>>  drivers/serial/serial_msm.c                        |   56 +-
> >>>>  drivers/usb/dwc3/dwc3-generic.c                    |   12 +
> >>>>  drivers/usb/host/ehci-msm.c                        |   24 +-
> >>>>  include/configs/dragonboard845c.h                  |   20 -
> >>>>  include/configs/qcom.h                             |   21 +
> >>>>  include/configs/qcs404-evb.h                       |   20 -
> >>>>  include/configs/sdm845.h                           |   26 -
> >>>>  include/dt-bindings/arm/coresight-cti-dt.h         |   37 +
> >>>>  include/dt-bindings/clock/qcom,camcc-sdm845.h      |  116 +
> >>>>  include/dt-bindings/clock/qcom,dispcc-sdm845.h     |   56 +
> >>>>  include/dt-bindings/clock/qcom,gcc-msm8916.h       |  179 +
> >>>>  include/dt-bindings/clock/qcom,gcc-msm8996.h       |  360 ++
> >>>>  include/dt-bindings/clock/qcom,gpucc-sdm845.h      |   24 +
> >>>>  include/dt-bindings/clock/qcom,lpass-sdm845.h      |   15 +
> >>>>  include/dt-bindings/clock/qcom,mmcc-msm8996.h      |  295 +
> >>>>  include/dt-bindings/clock/qcom,rpmcc.h             |  174 +
> >>>>  include/dt-bindings/clock/qcom,rpmh.h              |   37 +
> >>>>  include/dt-bindings/clock/qcom,turingcc-qcs404.h   |   15 +
> >>>>  include/dt-bindings/clock/qcom,videocc-sdm845.h    |   35 +
> >>>>  include/dt-bindings/dma/qcom-gpi.h                 |   11 +
> >>>>  include/dt-bindings/firmware/qcom,scm.h            |   18 +
> >>>>  include/dt-bindings/iio/qcom,spmi-vadc.h           |  300 +
> >>>>  include/dt-bindings/interconnect/qcom,msm8916.h    |  100 +
> >>>>  .../dt-bindings/interconnect/qcom,msm8996-cbf.h    |   12 +
> >>>>  include/dt-bindings/interconnect/qcom,msm8996.h    |  163 +
> >>>>  include/dt-bindings/interconnect/qcom,osm-l3.h     |   15 +
> >>>>  include/dt-bindings/interconnect/qcom,sdm845.h     |  150 +
> >>>>  include/dt-bindings/phy/phy-qcom-qmp.h             |   20 +
> >>>>  include/dt-bindings/phy/phy-qcom-qusb2.h           |   37 +
> >>>>  include/dt-bindings/pinctrl/qcom,pmic-gpio.h       |  164 +
> >>>>  include/dt-bindings/pinctrl/qcom,pmic-mpp.h        |  106 +
> >>>>  include/dt-bindings/power/qcom-rpmpd.h             |  412 ++
> >>>>  include/dt-bindings/qcom,q6asm.h                   |   26 +
> >>>>  .../dt-bindings/regulator/qcom,rpmh-regulator.h    |   36 +
> >>>>  include/dt-bindings/reset/qcom,gcc-msm8916.h       |  100 +
> >>>>  include/dt-bindings/reset/qcom,sdm845-aoss.h       |   17 +
> >>>>  include/dt-bindings/reset/qcom,sdm845-pdc.h        |   22 +
> >>>>  include/dt-bindings/soc/qcom,apr.h                 |   28 +
> >>>>  include/dt-bindings/soc/qcom,rpmh-rsc.h            |   14 +
> >>>>  include/dt-bindings/sound/apq8016-lpass.h          |    9 +
> >>>>  include/dt-bindings/sound/qcom,lpass.h             |   46 +
> >>>>  include/dt-bindings/sound/qcom,q6afe.h             |    9 +
> >>>>  include/dt-bindings/sound/qcom,q6asm.h             |   26 +
> >>>>  include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h |  234 +
> >>>>  include/dt-bindings/sound/qcom,wcd9335.h           |   15 +
> >>>>  include/init.h                                     |   11 +
> >>>>  126 files changed, 23909 insertions(+), 2375 deletions(-)
> >>>> ---
> >>>> base-commit: bcb4a9ddbd21a61b5b421ba374a785757bd28c80
> >>>>
> >>>> // Caleb (they/them)
> >>>>
> >>
> >> --
> >> // Caleb (they/them)
>
> --
> // Caleb (they/them)


More information about the U-Boot mailing list