U-Boot
Threads by month
- ----- 2025 -----
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2000 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
December 2020
- 176 participants
- 592 discussions

[PATCH v1 00/50] mips: octeon: Add serdes and device helper support incl. DM PCIe driver
by Stefan Roese 25 Apr '21
by Stefan Roese 25 Apr '21
25 Apr '21
This patchset adds the serdes and (mostly networking) device helper
macros and functions, needed to support the still missing Octeon II /
III devices in mainline U-Boot.
Please excuse the massive amount of files in this patch series. Also the
sometimes huge files (mostly headers with register definitions) that I
needed to include.
The infrastructure code with all the headers is ported without any
intended functional changes from the 2013 Cavium / Marvell U-Boot
version. It has undergone many hours of extensive code cleanup and
reformatting. Some of it done by using tools (checkpatch, Lindent, clang
format etc) and also some of it done manually, as I couldn't find some
tools that could do the needed work in a reliable and functional way.
The result is that checkpatch now only throws a "few" warnings that are
left. Some of those can't be removed without an even more extensive
cleanup / rewrite of the code, like the addition of typedefs.
The added headers and helper functions will be used by the upcoming
support for the Octeon II / III networking drivers, including PHY &
switch support. It was not easily possible to split these infrastructure
files into a separate patchset, as it is heavily interconnected in the
common QLM/DLM serdes interface initialization. The result is, that the
upcoming ethernet driver support will be much smaller (this is at least
my current assumption).
The added PCIe RC support with the included DM PCIe driver is the first
driver making use of this Octeon serdes infrastructure. This has been
tested with an Intel E1000 PCIe network card in the Octeon 7304 EBB.
Thanks,
Stefan
Aaron Williams (42):
mips: octeon: Add misc cvmx-helper header files
mips: octeon: Add cvmx-agl-defs.h header file
mips: octeon: Add cvmx-asxx-defs.h header file
mips: octeon: Add cvmx-bgxx-defs.h header file
mips: octeon: Add cvmx-ciu-defs.h header file
mips: octeon: Add cvmx-dbg-defs.h header file
mips: octeon: Add cvmx-dpi-defs.h header file
mips: octeon: Add cvmx-dtx-defs.h header file
mips: octeon: Add cvmx-fpa-defs.h header file
mips: octeon: Add cvmx-gmxx-defs.h header file
mips: octeon: Add cvmx-gserx-defs.h header file
mips: octeon: Add cvmx-ipd-defs.h header file
mips: octeon: Add cvmx-l2c-defs.h header file
mips: octeon: Add cvmx-mio-defs.h header file
mips: octeon: Add cvmx-npi-defs.h header file
mips: octeon: Add cvmx-pcieepx-defs.h header file
mips: octeon: Add cvmx-pciercx-defs.h header file
mips: octeon: Add cvmx-pcsx-defs.h header file
mips: octeon: Add cvmx-pemx-defs.h header file
mips: octeon: Add cvmx-pepx-defs.h header file
mips: octeon: Add cvmx-pip-defs.h header file
mips: octeon: Add cvmx-pki-defs.h header file
mips: octeon: Add cvmx-pko-defs.h header file
mips: octeon: Add cvmx-pow-defs.h header file
mips: octeon: Add cvmx-rst-defs.h header file
mips: octeon: Add cvmx-sata-defs.h header file
mips: octeon: Add cvmx-sli-defs.h header file
mips: octeon: Add cvmx-smix-defs.h header file
mips: octeon: Add cvmx-sriomaintx-defs.h header file
mips: octeon: Add cvmx-sriox-defs.h header file
mips: octeon: Add cvmx-sso-defs.h header file
mips: octeon: Add misc remaining header files
mips: octeon: Add cvmx-helper-cfg.c
mips: octeon: Add cvmx-helper-fdt.c
mips: octeon: Add cvmx-helper-jtag.c
mips: octeon: Add cvmx-helper-util.c
mips: octeon: Add cvmx-helper.c
mips: octeon: Add cvmx-pcie.c
mips: octeon: Add cvmx-qlm.c
mips: octeon: Add octeon_fdt.c
mips: octeon: Add octeon_qlm.c
mips: octeon: octeon_ebb7304: Add board specific QLM init code
Stefan Roese (8):
mips: global_data.h: Add Octeon specific data to arch_global_data
struct
mips: octeon: Misc changes required because of the newly added headers
mips: octeon: Move cvmx-lmcx-defs.h from mach/cvmx to mach
mips: octeon: Makefile: Enable building of the newly added C files
mips: octeon: Kconfig: Enable CONFIG_SYS_PCI_64BIT
mips: octeon: mrvl,cn73xx.dtsi: Add PCIe controller DT node
mips: octeon: Add Octeon PCIe host controller driver
mips: octeon: octeon_ebb7304_defconfig: Enable Octeon PCIe and E1000
arch/mips/dts/mrvl,cn73xx.dtsi | 16 +
arch/mips/include/asm/global_data.h | 9 +
arch/mips/mach-octeon/Kconfig | 4 +
arch/mips/mach-octeon/Makefile | 11 +
arch/mips/mach-octeon/bootoctlinux.c | 1 +
arch/mips/mach-octeon/cvmx-bootmem.c | 6 -
arch/mips/mach-octeon/cvmx-coremask.c | 1 +
arch/mips/mach-octeon/cvmx-helper-cfg.c | 1914 ++++
arch/mips/mach-octeon/cvmx-helper-fdt.c | 970 ++
arch/mips/mach-octeon/cvmx-helper-jtag.c | 172 +
arch/mips/mach-octeon/cvmx-helper-util.c | 1225 +++
arch/mips/mach-octeon/cvmx-helper.c | 2611 +++++
arch/mips/mach-octeon/cvmx-pcie.c | 2487 +++++
arch/mips/mach-octeon/cvmx-qlm.c | 2350 +++++
.../mach-octeon/include/mach/cvmx-address.h | 209 +
.../mach-octeon/include/mach/cvmx-agl-defs.h | 3135 ++++++
.../mach-octeon/include/mach/cvmx-asxx-defs.h | 709 ++
.../mach-octeon/include/mach/cvmx-bgxx-defs.h | 4106 +++++++
.../mach-octeon/include/mach/cvmx-ciu-defs.h | 7351 +++++++++++++
.../mach-octeon/include/mach/cvmx-cmd-queue.h | 441 +
.../mach-octeon/include/mach/cvmx-csr-enums.h | 87 +
arch/mips/mach-octeon/include/mach/cvmx-csr.h | 78 +
.../mach-octeon/include/mach/cvmx-dbg-defs.h | 33 +
.../mach-octeon/include/mach/cvmx-dpi-defs.h | 1460 +++
.../mach-octeon/include/mach/cvmx-dtx-defs.h | 6962 ++++++++++++
.../mach-octeon/include/mach/cvmx-error.h | 456 +
.../mach-octeon/include/mach/cvmx-fpa-defs.h | 1866 ++++
arch/mips/mach-octeon/include/mach/cvmx-fpa.h | 217 +
.../mips/mach-octeon/include/mach/cvmx-fpa1.h | 196 +
.../mips/mach-octeon/include/mach/cvmx-fpa3.h | 566 +
.../include/mach/cvmx-global-resources.h | 213 +
arch/mips/mach-octeon/include/mach/cvmx-gmx.h | 16 +
.../mach-octeon/include/mach/cvmx-gmxx-defs.h | 6378 +++++++++++
.../include/mach/cvmx-gserx-defs.h | 2191 ++++
.../include/mach/cvmx-helper-agl.h | 68 +
.../include/mach/cvmx-helper-bgx.h | 335 +
.../include/mach/cvmx-helper-board.h | 558 +
.../include/mach/cvmx-helper-cfg.h | 884 ++
.../include/mach/cvmx-helper-errata.h | 50 +
.../include/mach/cvmx-helper-fdt.h | 568 +
.../include/mach/cvmx-helper-fpa.h | 43 +
.../include/mach/cvmx-helper-gpio.h | 427 +
.../include/mach/cvmx-helper-ilk.h | 93 +
.../include/mach/cvmx-helper-ipd.h | 16 +
.../include/mach/cvmx-helper-jtag.h | 84 +
.../include/mach/cvmx-helper-loop.h | 37 +
.../include/mach/cvmx-helper-npi.h | 42 +
.../include/mach/cvmx-helper-pki.h | 319 +
.../include/mach/cvmx-helper-pko.h | 51 +
.../include/mach/cvmx-helper-pko3.h | 76 +
.../include/mach/cvmx-helper-rgmii.h | 99 +
.../include/mach/cvmx-helper-sfp.h | 437 +
.../include/mach/cvmx-helper-sgmii.h | 81 +
.../include/mach/cvmx-helper-spi.h | 73 +
.../include/mach/cvmx-helper-srio.h | 72 +
.../include/mach/cvmx-helper-util.h | 412 +
.../include/mach/cvmx-helper-xaui.h | 108 +
.../mach-octeon/include/mach/cvmx-helper.h | 565 +
.../mach-octeon/include/mach/cvmx-hwfau.h | 606 ++
.../mach-octeon/include/mach/cvmx-hwpko.h | 570 +
arch/mips/mach-octeon/include/mach/cvmx-ilk.h | 154 +
.../mach-octeon/include/mach/cvmx-ipd-defs.h | 1925 ++++
arch/mips/mach-octeon/include/mach/cvmx-ipd.h | 233 +
.../mach-octeon/include/mach/cvmx-l2c-defs.h | 172 +
.../include/mach/{cvmx => }/cvmx-lmcx-defs.h | 0
.../mach-octeon/include/mach/cvmx-mio-defs.h | 353 +
.../mach-octeon/include/mach/cvmx-npi-defs.h | 1953 ++++
.../mach-octeon/include/mach/cvmx-packet.h | 40 +
.../mips/mach-octeon/include/mach/cvmx-pcie.h | 279 +
.../include/mach/cvmx-pcieepx-defs.h | 6848 ++++++++++++
.../include/mach/cvmx-pciercx-defs.h | 5586 ++++++++++
.../mach-octeon/include/mach/cvmx-pcsx-defs.h | 1005 ++
.../mach-octeon/include/mach/cvmx-pemx-defs.h | 2028 ++++
.../mach-octeon/include/mach/cvmx-pexp-defs.h | 1382 +++
.../mach-octeon/include/mach/cvmx-pip-defs.h | 3040 ++++++
arch/mips/mach-octeon/include/mach/cvmx-pip.h | 1080 ++
.../mach-octeon/include/mach/cvmx-pki-defs.h | 2353 +++++
.../include/mach/cvmx-pki-resources.h | 157 +
arch/mips/mach-octeon/include/mach/cvmx-pki.h | 970 ++
.../mach-octeon/include/mach/cvmx-pko-defs.h | 9388 +++++++++++++++++
.../mach/cvmx-pko-internal-ports-range.h | 43 +
.../include/mach/cvmx-pko3-queue.h | 175 +
.../mach-octeon/include/mach/cvmx-pow-defs.h | 1135 ++
arch/mips/mach-octeon/include/mach/cvmx-pow.h | 2991 ++++++
arch/mips/mach-octeon/include/mach/cvmx-qlm.h | 304 +
.../mips/mach-octeon/include/mach/cvmx-regs.h | 330 +-
.../mach-octeon/include/mach/cvmx-rst-defs.h | 77 +
.../mach-octeon/include/mach/cvmx-sata-defs.h | 311 +
.../mach-octeon/include/mach/cvmx-scratch.h | 113 +
.../mach-octeon/include/mach/cvmx-sli-defs.h | 6548 ++++++++++++
.../mach-octeon/include/mach/cvmx-smix-defs.h | 360 +
.../include/mach/cvmx-sriomaintx-defs.h | 61 +
.../include/mach/cvmx-sriox-defs.h | 44 +
.../mach-octeon/include/mach/cvmx-sso-defs.h | 2904 +++++
arch/mips/mach-octeon/include/mach/cvmx-wqe.h | 1462 +++
.../mach-octeon/include/mach/octeon-feature.h | 2 +
.../mach-octeon/include/mach/octeon-model.h | 2 +
.../mach-octeon/include/mach/octeon_ddr.h | 189 +-
arch/mips/mach-octeon/octeon_fdt.c | 1040 ++
arch/mips/mach-octeon/octeon_qlm.c | 5853 ++++++++++
board/Marvell/octeon_ebb7304/board.c | 732 +-
configs/octeon_ebb7304_defconfig | 5 +-
drivers/pci/Kconfig | 6 +
drivers/pci/Makefile | 1 +
drivers/pci/pcie_octeon.c | 159 +
drivers/ram/octeon/octeon3_lmc.c | 28 +-
drivers/ram/octeon/octeon_ddr.c | 22 +-
107 files changed, 118724 insertions(+), 240 deletions(-)
create mode 100644 arch/mips/mach-octeon/cvmx-helper-cfg.c
create mode 100644 arch/mips/mach-octeon/cvmx-helper-fdt.c
create mode 100644 arch/mips/mach-octeon/cvmx-helper-jtag.c
create mode 100644 arch/mips/mach-octeon/cvmx-helper-util.c
create mode 100644 arch/mips/mach-octeon/cvmx-helper.c
create mode 100644 arch/mips/mach-octeon/cvmx-pcie.c
create mode 100644 arch/mips/mach-octeon/cvmx-qlm.c
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-address.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-agl-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-asxx-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-bgxx-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-ciu-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-cmd-queue.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-csr-enums.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-csr.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-dbg-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-dpi-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-dtx-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-error.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-fpa-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-fpa.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-fpa1.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-fpa3.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-global-resources.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-gmx.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-gmxx-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-gserx-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-agl.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-bgx.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-board.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-cfg.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-errata.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-fdt.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-fpa.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-gpio.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-ilk.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-ipd.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-jtag.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-loop.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-npi.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-pki.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-pko.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-pko3.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-rgmii.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-sfp.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-sgmii.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-spi.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-srio.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-util.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper-xaui.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-helper.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-hwfau.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-hwpko.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-ilk.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-ipd-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-ipd.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-l2c-defs.h
rename arch/mips/mach-octeon/include/mach/{cvmx => }/cvmx-lmcx-defs.h (100%)
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-mio-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-npi-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-packet.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pcie.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pcieepx-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pciercx-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pcsx-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pemx-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pexp-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pip-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pip.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pki-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pki-resources.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pki.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pko-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pko-internal-ports-range.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pko3-queue.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pow-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-pow.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-qlm.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-rst-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-sata-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-scratch.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-sli-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-smix-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-sriomaintx-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-sriox-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-sso-defs.h
create mode 100644 arch/mips/mach-octeon/include/mach/cvmx-wqe.h
create mode 100644 arch/mips/mach-octeon/octeon_fdt.c
create mode 100644 arch/mips/mach-octeon/octeon_qlm.c
create mode 100644 drivers/pci/pcie_octeon.c
--
2.29.2
2
56

21 Apr '21
At present each device has two sequence numbers, with 'req_seq' being
set up at bind time and 'seq' at probe time. The idea is that devices
can 'request' a sequence number and then the conflicts are resolved when
the device is probed.
This makes things complicated in a few cases, since we don't really know
(at bind time) what the sequence number will end up being. We want to
honour the bind-time requests if at all possible, but in fact the only
source of these at present is the devicetree aliases.
Apart from the obvious need for sequence numbers to supports U-Boot's
numbering on devices on the command line, the current scheme was
designed to:
- avoid calculating the sequence number until it is needed, to save
execution time
- allow multiple devices to obtain a particular sequence number as they
are probed and removed
- retain a record of the 'requested' sequence number even if it turns out
that a device could not get it (to allow debugging and retrying)
After some years using the current scheme it seems on balance that these
goals don't have as much merit as first thought. The first point would
be persuasive except that we end up reading the devicetree aliases at
bind-time anyway. So the work of resolving the sequence numbers during
probing is not that great. The second point hasn't really been an issue,
as there is typically no contention for sequence numbers (boards tend to
allocate them statically in the devicetree). Re the third point, we can
often figure out what was requested by looking at aliases, and in the
cases where we can't, it doesn't seem to matter much.
Since we have the devicetree available at bind time, we may as well just
use it, in the hope that the required processing will turn out to be
useful later (i.e. the device actually gets used). In addition, it is
simpler to use a single sequence number, since it avoids confusion and
some extra code.
This series moves U-Boot to use a single, bind-time sequence number. All
uclasses assign sequence numbers to their devices, so that as soon as a
device is bound, it has a sequence number. If the uclass flag
DM_UC_FLAG_SEQ_ALIAS is enabled (as well as the CONFIG option), a
devicetree alias provides the number. Otherwise, the next available number
(after the last alias and avoiding existing devices) is used.
Note that it is still possible to have the uclass manually allocate
sequence numbers, using the DM_UC_FLAG_NO_SEQ flag. This is used by PCI,
due to its special requirements.
Apart from the simplicity gains, overall these changes seem to reduce the
number of tweaks and workarounds needed to get the desired behaviour.
However there will certainly be some problems created, so board
maintainers should test this out.
This series is available at u-boot-dm/seq-working
Changes in v3:
- Update PCI to use manual sequence numbering
- Add new patch to test DM_UC_FLAG_NO_AUTO_SEQ
Changes in v2:
- Give all devices a sequence number
- Drop uclass_alloc_all_seqs() and GD_FLG_DM_NO_SEQ flag
- Drop the GD_FLG_DM_NO_SEQ flag
- Drop special numbering in the i2c uclass
- Add new patch to allow manual sequence numbering
- Use the sequence number directly instead of max bus
- Adjust the tests to handle the new allocation scheme
- Drop the networking changes which are no-longer needed
- Update for new logic
- Adjust commit message
- Drop pointless check for max == -1
- Adjust the tests to handle the new allocation scheme
- Simplify the logic so auto_seq is positive
- Update the docs to indicate all devices get a sequence number
- Update the docs to explain how aliases reserve sequence numbers
- Drop commit changing efi_uc_destroy()
Simon Glass (28):
linker_lists: Fix alignment issue
dm: Avoid accessing seq directly
dm: core: Update uclass_find_next_free_req_seq() args
dm: core: Add a new sequence number for devices
dm: test: Check all devices have a sequence numbers
dm: core: Switch binding to use new sequence numbers
dm: Fix return value in dev_read_alias_seq()
dm: test: Drop assumptions of no sequence numbers
octeon: Don't attempt to set the sequence number
i2c: Update for new sequence numbers
net: Update to use new sequence numbers
dm: core: Allow manual sequence numbering
pci: Update to use new sequence numbers
spi: Update for new sequence numbers
usb: ehci-mx6: Drop assignment of sequence number
usb: Update for new sequence numbers
x86: Drop unnecessary mp_init logic
x86: Simplify acpi_device_infer_name()
gpio: Update for new sequence numbers
pinctrl: Update for new sequence numbers
dm: Switch over to use new sequence number for dev_seq()
dm: test: Add a test for DM_UC_FLAG_NO_AUTO_SEQ
dm: Drop uclass_resolve_seq()
dm: Drop the unused arg in uclass_find_device_by_seq()
dm: core: Update uclass_find_next_free_req_seq() for new scheme
cmd: Drop use of old sequence numbers in commands
dm: core: Drop seq and req_seq
dm: Update documentation for new sequence numbers
arch/Kconfig | 11 ++
arch/arm/include/asm/mach-imx/mxc_i2c.h | 2 +-
arch/arm/mach-k3/am6_init.c | 2 +-
arch/arm/mach-k3/j721e_init.c | 2 +-
arch/arm/mach-k3/sysfw-loader.c | 2 +-
arch/sandbox/dts/test.dts | 15 +-
arch/x86/cpu/apollolake/cpu.c | 2 +-
arch/x86/cpu/broadwell/cpu_full.c | 2 +-
arch/x86/cpu/ivybridge/model_206ax.c | 2 +-
arch/x86/cpu/mp_init.c | 23 +---
arch/x86/include/asm/mp.h | 2 +-
board/xilinx/versal/board.c | 12 +-
board/xilinx/zynqmp/zynqmp.c | 12 +-
cmd/axi.c | 6 +-
cmd/cpu.c | 2 +-
cmd/i2c.c | 6 +-
cmd/misc.c | 2 +-
cmd/osd.c | 6 +-
cmd/pci.c | 7 +-
cmd/pmic.c | 4 +-
cmd/remoteproc.c | 2 +-
cmd/w1.c | 4 +-
doc/api/linker_lists.rst | 59 ++++++++
doc/driver-model/design.rst | 59 ++++----
drivers/core/device-remove.c | 1 -
drivers/core/device.c | 50 ++-----
drivers/core/dump.c | 4 +-
drivers/core/read.c | 4 +-
drivers/core/root.c | 8 +-
drivers/core/uclass.c | 86 +++---------
drivers/gpio/imx_rgpio2p.c | 2 +-
drivers/gpio/iproc_gpio.c | 2 +-
drivers/gpio/mvebu_gpio.c | 2 +-
drivers/gpio/mxc_gpio.c | 2 +-
drivers/gpio/octeon_gpio.c | 2 +-
drivers/gpio/vybrid_gpio.c | 2 +-
drivers/i2c/ast_i2c.c | 4 +-
drivers/i2c/davinci_i2c.c | 2 +-
drivers/i2c/designware_i2c_pci.c | 16 +--
drivers/i2c/exynos_hs_i2c.c | 2 +-
drivers/i2c/i2c-gpio.c | 2 +-
drivers/i2c/i2c-uclass.c | 39 +-----
drivers/i2c/i2c-versatile.c | 5 -
drivers/i2c/imx_lpi2c.c | 12 +-
drivers/i2c/intel_i2c.c | 12 +-
drivers/i2c/lpc32xx_i2c.c | 6 +-
drivers/i2c/muxes/i2c-mux-uclass.c | 4 +-
drivers/i2c/mvtwsi.c | 6 +-
drivers/i2c/mxc_i2c.c | 10 +-
drivers/i2c/nx_i2c.c | 2 +-
drivers/i2c/octeon_i2c.c | 3 +-
drivers/i2c/s3c24x0_i2c.c | 2 +-
drivers/i2c/tegra_i2c.c | 5 +-
drivers/mmc/fsl_esdhc_imx.c | 4 +-
drivers/mmc/octeontx_hsmmc.c | 2 -
drivers/mtd/spi/sandbox.c | 4 +-
drivers/net/dwc_eth_qos.c | 2 +-
drivers/net/fec_mxc.c | 7 +-
drivers/net/fsl-mc/mc.c | 2 +-
drivers/net/fsl_mcdmafec.c | 2 +-
drivers/net/ftgmac100.c | 2 +-
drivers/net/higmacv300.c | 2 +-
drivers/net/mcffec.c | 2 +-
drivers/net/octeontx/nicvf_main.c | 9 +-
drivers/net/octeontx/smi.c | 3 +-
drivers/net/octeontx2/nix.c | 2 +-
drivers/net/octeontx2/rvu_pf.c | 6 +-
drivers/net/xilinx_axi_emac.c | 2 +-
drivers/net/xilinx_emaclite.c | 2 +-
drivers/net/zynq_gem.c | 2 +-
drivers/pci/pci-aardvark.c | 2 +-
drivers/pci/pci-uclass.c | 77 ++++++-----
drivers/pci/pci_auto.c | 16 +--
drivers/pci/pcie_dw_mvebu.c | 6 +-
drivers/pci/pcie_dw_ti.c | 6 +-
drivers/pci/pcie_ecam_generic.c | 2 +-
drivers/pci/pcie_fsl.c | 16 +--
drivers/pci/pcie_intel_fpga.c | 2 +-
drivers/pci/pcie_layerscape_fixup.c | 4 +-
drivers/pci/pcie_layerscape_gen4.c | 10 +-
drivers/pci/pcie_layerscape_gen4_fixup.c | 2 +-
drivers/pci/pcie_layerscape_rc.c | 12 +-
drivers/pci/pcie_mediatek.c | 2 +-
drivers/pci/pcie_rockchip.c | 6 +-
drivers/pinctrl/exynos/pinctrl-exynos.c | 2 +-
drivers/serial/serial_mcf.c | 2 +-
drivers/serial/serial_s5p.c | 2 +-
drivers/spi/altera_spi.c | 2 +-
drivers/spi/cf_spi.c | 12 +-
drivers/spi/fsl_dspi.c | 8 +-
drivers/spi/fsl_espi.c | 2 +-
drivers/spi/octeon_spi.c | 2 +-
drivers/spi/pic32_spi.c | 4 +-
drivers/spi/rk_spi.c | 1 -
drivers/spi/sandbox_spi.c | 2 +-
drivers/spi/spi-uclass.c | 4 +-
drivers/spi/tegra114_spi.c | 2 +-
drivers/spi/tegra20_sflash.c | 2 +-
drivers/spi/tegra20_slink.c | 2 +-
drivers/spi/tegra210_qspi.c | 2 +-
drivers/spi/xilinx_spi.c | 2 +-
drivers/spi/zynq_qspi.c | 2 +-
drivers/spi/zynq_spi.c | 2 +-
drivers/usb/gadget/max3420_udc.c | 2 +-
drivers/usb/host/ehci-mx5.c | 2 +-
drivers/usb/host/ehci-mx6.c | 14 +-
drivers/usb/host/ehci-omap.c | 2 +-
drivers/usb/host/ehci-vf.c | 8 +-
drivers/usb/host/usb-sandbox.c | 2 +-
drivers/usb/host/usb-uclass.c | 6 +-
drivers/video/vidconsole-uclass.c | 4 +-
drivers/virtio/virtio-uclass.c | 2 +-
drivers/watchdog/ast_wdt.c | 2 +-
drivers/watchdog/at91sam9_wdt.c | 2 +-
drivers/watchdog/cdns_wdt.c | 2 +-
drivers/watchdog/omap_wdt.c | 2 +-
drivers/watchdog/orion_wdt.c | 2 +-
drivers/watchdog/sbsa_gwdt.c | 2 +-
drivers/watchdog/sp805_wdt.c | 2 +-
drivers/watchdog/tangier_wdt.c | 2 +-
drivers/watchdog/xilinx_tb_wdt.c | 2 +-
drivers/watchdog/xilinx_wwdt.c | 2 +-
include/dm/device.h | 32 ++---
include/dm/uclass-id.h | 1 +
include/dm/uclass-internal.h | 37 +++--
include/dm/uclass.h | 18 +--
include/linker_lists.h | 3 +-
include/pci.h | 2 +-
include/spi.h | 2 +-
lib/acpi/acpi_device.c | 27 +---
lib/efi_loader/efi_device_path.c | 4 +-
net/eth-uclass.c | 24 ++--
test/dm/acpi.c | 6 +-
test/dm/blk.c | 3 -
test/dm/bus.c | 15 +-
test/dm/core.c | 19 +++
test/dm/i2c.c | 3 -
test/dm/spi.c | 3 -
test/dm/test-fdt.c | 168 +++++++++++++++++------
139 files changed, 634 insertions(+), 613 deletions(-)
--
2.29.2.684.gfbc64c5ab5-goog
6
66
If one of the reads fails when importing redundant environments (a
single read failure), the env_flags wouldn't get initialized in
env_import_redund(). If a user then calls saveenv, the new environment
will have the wrong flags value. So on the next load the new environment
will be ignored.
While debugging this, I also noticed that env/sf.c was not correctly
handling a single read failure, as it would not check the crc before
assigning it to gd->env_addr.
Having a special error path for when there is a single read failure
seems unnecessary and may lead to future bugs. Instead collapse the
'single read failure' error to be the same as a 'single crc failure'.
That way env_check_redund() either passes or fails, and if it passes we
are guaranteed to have checked the CRC.
Signed-off-by: Brandon Maier <brandon.maier(a)rockwellcollins.com>
CC: Joe Hershberger <joe.hershberger(a)ni.com>
CC: Wolfgang Denk <wd(a)denx.de>
CC: Heiko Schocher <hs(a)denx.de>
---
env/common.c | 27 ++++++++-------------------
env/sf.c | 2 +-
include/env.h | 2 --
3 files changed, 9 insertions(+), 22 deletions(-)
diff --git a/env/common.c b/env/common.c
index 6c32a9b479..ca22885fa4 100644
--- a/env/common.c
+++ b/env/common.c
@@ -144,7 +144,7 @@ static unsigned char env_flags;
int env_check_redund(const char *buf1, int buf1_read_fail,
const char *buf2, int buf2_read_fail)
{
- int crc1_ok, crc2_ok;
+ int crc1_ok = 0, crc2_ok = 0;
env_t *tmp_env1, *tmp_env2;
tmp_env1 = (env_t *)buf1;
@@ -152,25 +152,18 @@ int env_check_redund(const char *buf1, int buf1_read_fail,
if (buf1_read_fail && buf2_read_fail) {
puts("*** Error - No Valid Environment Area found\n");
+ return -EIO;
} else if (buf1_read_fail || buf2_read_fail) {
puts("*** Warning - some problems detected ");
puts("reading environment; recovered successfully\n");
}
- if (buf1_read_fail && buf2_read_fail) {
- return -EIO;
- } else if (!buf1_read_fail && buf2_read_fail) {
- gd->env_valid = ENV_VALID;
- return -EINVAL;
- } else if (buf1_read_fail && !buf2_read_fail) {
- gd->env_valid = ENV_REDUND;
- return -ENOENT;
- }
-
- crc1_ok = crc32(0, tmp_env1->data, ENV_SIZE) ==
- tmp_env1->crc;
- crc2_ok = crc32(0, tmp_env2->data, ENV_SIZE) ==
- tmp_env2->crc;
+ if (!buf1_read_fail)
+ crc1_ok = crc32(0, tmp_env1->data, ENV_SIZE) ==
+ tmp_env1->crc;
+ if (!buf2_read_fail)
+ crc2_ok = crc32(0, tmp_env2->data, ENV_SIZE) ==
+ tmp_env2->crc;
if (!crc1_ok && !crc2_ok) {
return -ENOMSG; /* needed for env_load() */
@@ -207,10 +200,6 @@ int env_import_redund(const char *buf1, int buf1_read_fail,
if (ret == -EIO) {
env_set_default("bad env area", 0);
return -EIO;
- } else if (ret == -EINVAL) {
- return env_import((char *)buf1, 1, flags);
- } else if (ret == -ENOENT) {
- return env_import((char *)buf2, 1, flags);
} else if (ret == -ENOMSG) {
env_set_default("bad CRC", 0);
return -ENOMSG;
diff --git a/env/sf.c b/env/sf.c
index 91ed2860ed..1102b42804 100644
--- a/env/sf.c
+++ b/env/sf.c
@@ -350,7 +350,7 @@ static int env_sf_init_early(void)
ret = env_check_redund((char *)tmp_env1, read1_fail,
(char *)tmp_env2, read2_fail);
- if (ret == -EIO || ret == -ENOMSG)
+ if (ret < 0)
goto err_read;
if (gd->env_valid == ENV_VALID)
diff --git a/include/env.h b/include/env.h
index c15339a93f..b5731e4b9a 100644
--- a/include/env.h
+++ b/include/env.h
@@ -328,8 +328,6 @@ int env_export(struct environment_s *env_out);
* @buf2_read_fail: 0 if buf2 is valid, non-zero if invalid
* @return 0 if OK,
* -EIO if no environment is valid,
- * -EINVAL if read of second entry is good
- * -ENOENT if read of first entry is good
* -ENOMSG if the CRC was bad
*/
--
2.29.1
2
2

[RFC PATCH] watchdog: base rate-limiting on get_ticks() rather than get_timer()
by Rasmus Villemoes 12 Apr '21
by Rasmus Villemoes 12 Apr '21
12 Apr '21
On powerpc, get_timer() is implemented using a volatile variable that
gets incremented from the decrementer interrupt handler. Hence, when
interrupts are disabled, time as measured by get_timer() ceases to
pass.
Interrupts are necessarily disabled during bootm (see the comment in
bootm_disable_interrupts() for why). But after interrupts are
disabled, there's still lots of work to do - e.g. decompressing the
kernel image to the right load address. Unfortunately, the
rate-limiting logic in wdt_uclass.c's watchdog_reset function means
that WATCHDOG_RESET() becomes a no-op, since get_timer() never
progresses past the next_reset.
This, combined with an external gpio-triggered watchdog that must be
petted at least every 800ms, means our board gets reset before booting
into linux.
Now, at least on powerpc, get_ticks() continues to return sensible
results whether or not interrupts are enabled. So this fixes the above
problem for our board - but I don't know if get_ticks() can be assumed
to always work.
Signed-off-by: Rasmus Villemoes <rasmus.villemoes(a)prevas.dk>
---
This is what I had in mind. I also considered making it a config knob
(possibly just auto-selected based on $ARCH) whether to use
get_timer() or get_ticks(), but that becomes quite ugly.
drivers/watchdog/wdt-uclass.c | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/drivers/watchdog/wdt-uclass.c b/drivers/watchdog/wdt-uclass.c
index 4cdb7bd64c..7be4e9b5bc 100644
--- a/drivers/watchdog/wdt-uclass.c
+++ b/drivers/watchdog/wdt-uclass.c
@@ -16,14 +16,15 @@ DECLARE_GLOBAL_DATA_PTR;
#define WATCHDOG_TIMEOUT_SECS (CONFIG_WATCHDOG_TIMEOUT_MSECS / 1000)
-/*
- * Reset every 1000ms, or however often is required as indicated by a
- * hw_margin_ms property.
- */
-static ulong reset_period = 1000;
+static u64 ratelimit_ticks;
int initr_watchdog(void)
{
+ /*
+ * Reset every 1000ms, or however often is required as indicated by a
+ * hw_margin_ms property.
+ */
+ u32 reset_period = 1000;
u32 timeout = WATCHDOG_TIMEOUT_SECS;
/*
@@ -48,6 +49,7 @@ int initr_watchdog(void)
4 * reset_period) / 4;
}
+ ratelimit_ticks = usec_to_tick(reset_period * 1000);
wdt_start(gd->watchdog_dev, timeout * 1000, 0);
gd->flags |= GD_FLG_WDT_READY;
printf("WDT: Started with%s servicing (%ds timeout)\n",
@@ -117,17 +119,17 @@ int wdt_expire_now(struct udevice *dev, ulong flags)
*/
void watchdog_reset(void)
{
- static ulong next_reset;
- ulong now;
+ static u64 last_reset;
+ u64 now;
/* Exit if GD is not ready or watchdog is not initialized yet */
if (!gd || !(gd->flags & GD_FLG_WDT_READY))
return;
/* Do not reset the watchdog too often */
- now = get_timer(0);
- if (time_after(now, next_reset)) {
- next_reset = now + reset_period;
+ now = get_ticks();
+ if (now - last_reset >= ratelimit_ticks) {
+ last_reset = now;
wdt_reset(gd->watchdog_dev);
}
}
--
2.23.0
4
12

[PATCH v3 1/2] video: backlight: Support PWMs without a known period_ns
by Alper Nebi Yasak 11 Apr '21
by Alper Nebi Yasak 11 Apr '21
11 Apr '21
The PWM device provided by Chrome OS EC doesn't really support anything
other than setting a relative duty cycle. To support it as a backlight,
this patch makes the PWM period optional in the device tree and pretends
the valid brightness range is its period_ns.
Also adds a sandbox test for a PWM channel that has a fixed period,
checking that the resulting duty_cycle matches on a set_config() even if
the requested period_ns can't be set.
Signed-off-by: Alper Nebi Yasak <alpernebiyasak(a)gmail.com>
Reviewed-by: Simon Glass <sjg(a)chromium.org>
---
Changes in v3:
- Add tag: "Reviewed-by: Simon Glass <sjg(a)chromium.org>"
- Adjust to match recently merged duty cycle calculation fix.
v2: https://patchwork.ozlabs.org/project/uboot/patch/20200926200851.4388-1-alpe…
Changes in v2:
- Add sandbox test to pwm.c (using sandbox_pwm's channel 2)
- Add comments to pwm_set_config() and pwm_ops->set_config()
v1: https://patchwork.ozlabs.org/project/uboot/patch/20200923165231.18188-1-alp…
drivers/pwm/sandbox_pwm.c | 11 +++++++++--
drivers/video/pwm_backlight.c | 20 ++++++++++++++------
include/pwm.h | 8 ++++++++
test/dm/pwm.c | 11 +++++++++++
4 files changed, 42 insertions(+), 8 deletions(-)
diff --git a/drivers/pwm/sandbox_pwm.c b/drivers/pwm/sandbox_pwm.c
index 28988187e039..3fd2e78c909d 100644
--- a/drivers/pwm/sandbox_pwm.c
+++ b/drivers/pwm/sandbox_pwm.c
@@ -59,8 +59,15 @@ static int sandbox_pwm_set_config(struct udevice *dev, uint channel,
if (channel >= NUM_CHANNELS)
return -ENOSPC;
chan = &priv->chan[channel];
- chan->period_ns = period_ns;
- chan->duty_ns = duty_ns;
+
+ if (channel == 2) {
+ /* Pretend to have some fixed period */
+ chan->period_ns = 4096;
+ chan->duty_ns = duty_ns * 4096 / period_ns;
+ } else {
+ chan->period_ns = period_ns;
+ chan->duty_ns = duty_ns;
+ }
return 0;
}
diff --git a/drivers/video/pwm_backlight.c b/drivers/video/pwm_backlight.c
index 9519180ceb39..18b7a00b033c 100644
--- a/drivers/video/pwm_backlight.c
+++ b/drivers/video/pwm_backlight.c
@@ -62,10 +62,17 @@ static int set_pwm(struct pwm_backlight_priv *priv)
uint duty_cycle;
int ret;
- duty_cycle = priv->period_ns * (priv->cur_level - priv->min_level) /
- (priv->max_level - priv->min_level);
- ret = pwm_set_config(priv->pwm, priv->channel, priv->period_ns,
- duty_cycle);
+ if (priv->period_ns) {
+ duty_cycle = priv->period_ns * (priv->cur_level - priv->min_level) /
+ (priv->max_level - priv->min_level);
+ ret = pwm_set_config(priv->pwm, priv->channel, priv->period_ns,
+ duty_cycle);
+ } else {
+ /* PWM driver will internally scale these like the above. */
+ ret = pwm_set_config(priv->pwm, priv->channel,
+ priv->max_level - priv->min_level,
+ priv->cur_level - priv->min_level);
+ }
if (ret)
return log_ret(ret);
@@ -213,10 +220,11 @@ static int pwm_backlight_ofdata_to_platdata(struct udevice *dev)
log_debug("Cannot get PWM: ret=%d\n", ret);
return log_ret(ret);
}
- if (args.args_count < 2)
+ if (args.args_count < 1)
return log_msg_ret("Not enough arguments to pwm\n", -EINVAL);
priv->channel = args.args[0];
- priv->period_ns = args.args[1];
+ if (args.args_count > 1)
+ priv->period_ns = args.args[1];
if (args.args_count > 2)
priv->polarity = args.args[2];
diff --git a/include/pwm.h b/include/pwm.h
index 54ae3e64c310..97bda0856e6c 100644
--- a/include/pwm.h
+++ b/include/pwm.h
@@ -15,6 +15,10 @@ struct pwm_ops {
/**
* set_config() - Set the PWM configuration
*
+ * Change both the PWM device's period and it's duty period if
+ * possible. Otherwise, set an appropriate duty period that best
+ * matches the given period_ns / duty_ns ratio for the device.
+ *
* @dev: PWM device to update
* @channel: PWM channel to update
* @period_ns: PWM period in nanoseconds
@@ -49,6 +53,10 @@ struct pwm_ops {
/**
* pwm_set_config() - Set the PWM configuration
*
+ * Change both the PWM device's period and it's duty period if
+ * possible. Otherwise, set an appropriate duty period that best
+ * matches the given period_ns / duty_ns ratio for the device.
+ *
* @dev: PWM device to update
* @channel: PWM channel to update
* @period_ns: PWM period in nanoseconds
diff --git a/test/dm/pwm.c b/test/dm/pwm.c
index 0de6dba1ba64..b624cf3d6558 100644
--- a/test/dm/pwm.c
+++ b/test/dm/pwm.c
@@ -6,6 +6,7 @@
#include <common.h>
#include <dm.h>
#include <pwm.h>
+#include <asm/test.h>
#include <dm/test.h>
#include <test/test.h>
#include <test/ut.h>
@@ -14,6 +15,10 @@
static int dm_test_pwm_base(struct unit_test_state *uts)
{
struct udevice *dev;
+ uint period_ns;
+ uint duty_ns;
+ bool enable;
+ bool polarity;
ut_assertok(uclass_get_device(UCLASS_PWM, 0, &dev));
ut_assertnonnull(dev);
@@ -24,6 +29,12 @@ static int dm_test_pwm_base(struct unit_test_state *uts)
ut_asserteq(-ENOSPC, pwm_set_enable(dev, 3, true));
ut_assertok(pwm_set_invert(dev, 0, true));
+ ut_assertok(pwm_set_config(dev, 2, 100, 50));
+ ut_assertok(sandbox_pwm_get_config(dev, 2, &period_ns, &duty_ns,
+ &enable, &polarity));
+ ut_asserteq(period_ns, 4096);
+ ut_asserteq(duty_ns, 50 * 4096 / 100);
+
ut_assertok(uclass_get_device(UCLASS_PWM, 1, &dev));
ut_asserteq(-ENODEV, uclass_get_device(UCLASS_PWM, 2, &dev));
--
2.28.0
2
3

[PATCH] video: Fix line padding calculation for 16 and 24 BPP bitmaps
by Sylwester Nawrocki 11 Apr '21
by Sylwester Nawrocki 11 Apr '21
11 Apr '21
Each row in the pixel array in the bitmap file is padded
if necessary so the row size is always a multiple of 4 bytes.
In current code the complement of row size to a multiple of
4 bytes is further unnecessarily multiplied by the pixel size.
This results in incorrect displaying of bitmaps having row size
that is not a multiple of 4 bytes. Fix this by removing
the unnecessary multiplication.
Tested with 24BPP bitmap and XRGB32 display.
Signed-off-by: Sylwester Nawrocki <s.nawrocki(a)samsung.com>
---
drivers/video/video_bmp.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/video/video_bmp.c b/drivers/video/video_bmp.c
index 5a4d12c68d..5537378781 100644
--- a/drivers/video/video_bmp.c
+++ b/drivers/video/video_bmp.c
@@ -328,7 +328,7 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y,
for (j = 0; j < width; j++)
fb_put_word(&fb, &bmap);
- bmap += (padded_width - width) * 2;
+ bmap += (padded_width - width);
fb -= width * 2 + priv->line_length;
}
break;
@@ -352,7 +352,7 @@ int video_bmp_display(struct udevice *dev, ulong bmp_image, int x, int y,
}
}
fb -= priv->line_length + width * (bpix / 8);
- bmap += (padded_width - width) * 3;
+ bmap += (padded_width - width);
}
break;
#endif /* CONFIG_BMP_24BPP */
--
2.17.1
3
2

19 Mar '21
This file contains characters which are not valid in utf-8. This confuses
dtoc which wants to parse it. They don't really serve any purpose anyway,
so drop them.
To: U-Boot Mailing List <u-boot(a)lists.denx.de>
Cc: Tom Rini <trini(a)konsulko.com>
Signed-off-by: Simon Glass <sjg(a)chromium.org>
---
include/video_font_data.h | 258 +++++++++++++++++++-------------------
1 file changed, 129 insertions(+), 129 deletions(-)
diff --git a/include/video_font_data.h b/include/video_font_data.h
index ed5fd640a80..6e64198d1a4 100644
--- a/include/video_font_data.h
+++ b/include/video_font_data.h
@@ -2302,7 +2302,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 127 0x7f '' */
+ /* 127 0x7f */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -2320,7 +2320,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 128 0x80 '�' */
+ /* 128 0x80 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x3c, /* 00111100 */
@@ -2338,7 +2338,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 129 0x81 '�' */
+ /* 129 0x81 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xcc, /* 11001100 */
@@ -2356,7 +2356,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 130 0x82 '�' */
+ /* 130 0x82 */
0x00, /* 00000000 */
0x0c, /* 00001100 */
0x18, /* 00011000 */
@@ -2374,7 +2374,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 131 0x83 '�' */
+ /* 131 0x83 */
0x00, /* 00000000 */
0x10, /* 00010000 */
0x38, /* 00111000 */
@@ -2392,7 +2392,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 132 0x84 '�' */
+ /* 132 0x84 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xcc, /* 11001100 */
@@ -2410,7 +2410,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 133 0x85 '�' */
+ /* 133 0x85 */
0x00, /* 00000000 */
0x60, /* 01100000 */
0x30, /* 00110000 */
@@ -2428,7 +2428,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 134 0x86 '�' */
+ /* 134 0x86 */
0x00, /* 00000000 */
0x38, /* 00111000 */
0x6c, /* 01101100 */
@@ -2446,7 +2446,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 135 0x87 '�' */
+ /* 135 0x87 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -2464,7 +2464,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 136 0x88 '�' */
+ /* 136 0x88 */
0x00, /* 00000000 */
0x10, /* 00010000 */
0x38, /* 00111000 */
@@ -2482,7 +2482,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 137 0x89 '�' */
+ /* 137 0x89 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xc6, /* 11000110 */
@@ -2500,7 +2500,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 138 0x8a '�' */
+ /* 138 0x8a */
0x00, /* 00000000 */
0x60, /* 01100000 */
0x30, /* 00110000 */
@@ -2518,7 +2518,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 139 0x8b '�' */
+ /* 139 0x8b */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x66, /* 01100110 */
@@ -2536,7 +2536,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 140 0x8c '�' */
+ /* 140 0x8c */
0x00, /* 00000000 */
0x18, /* 00011000 */
0x3c, /* 00111100 */
@@ -2554,7 +2554,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 141 0x8d '�' */
+ /* 141 0x8d */
0x00, /* 00000000 */
0x60, /* 01100000 */
0x30, /* 00110000 */
@@ -2572,7 +2572,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 142 0x8e '�' */
+ /* 142 0x8e */
0x00, /* 00000000 */
0xc6, /* 11000110 */
0x00, /* 00000000 */
@@ -2590,7 +2590,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 143 0x8f '�' */
+ /* 143 0x8f */
0x38, /* 00111000 */
0x6c, /* 01101100 */
0x38, /* 00111000 */
@@ -2608,7 +2608,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 144 0x90 '�' */
+ /* 144 0x90 */
0x0c, /* 00001100 */
0x18, /* 00011000 */
0x00, /* 00000000 */
@@ -2626,7 +2626,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 145 0x91 '�' */
+ /* 145 0x91 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -2644,7 +2644,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 146 0x92 '�' */
+ /* 146 0x92 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x3e, /* 00111110 */
@@ -2662,7 +2662,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 147 0x93 '�' */
+ /* 147 0x93 */
0x00, /* 00000000 */
0x10, /* 00010000 */
0x38, /* 00111000 */
@@ -2680,7 +2680,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 148 0x94 '�' */
+ /* 148 0x94 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xc6, /* 11000110 */
@@ -2698,7 +2698,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 149 0x95 '�' */
+ /* 149 0x95 */
0x00, /* 00000000 */
0x60, /* 01100000 */
0x30, /* 00110000 */
@@ -2716,7 +2716,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 150 0x96 '�' */
+ /* 150 0x96 */
0x00, /* 00000000 */
0x30, /* 00110000 */
0x78, /* 01111000 */
@@ -2734,7 +2734,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 151 0x97 '�' */
+ /* 151 0x97 */
0x00, /* 00000000 */
0x60, /* 01100000 */
0x30, /* 00110000 */
@@ -2752,7 +2752,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 152 0x98 '�' */
+ /* 152 0x98 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xc6, /* 11000110 */
@@ -2770,7 +2770,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x78, /* 01111000 */
0x00, /* 00000000 */
- /* 153 0x99 '�' */
+ /* 153 0x99 */
0x00, /* 00000000 */
0xc6, /* 11000110 */
0x00, /* 00000000 */
@@ -2788,7 +2788,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 154 0x9a '�' */
+ /* 154 0x9a */
0x00, /* 00000000 */
0xc6, /* 11000110 */
0x00, /* 00000000 */
@@ -2806,7 +2806,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 155 0x9b '�' */
+ /* 155 0x9b */
0x00, /* 00000000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -2824,7 +2824,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 156 0x9c '�' */
+ /* 156 0x9c */
0x00, /* 00000000 */
0x38, /* 00111000 */
0x6c, /* 01101100 */
@@ -2842,7 +2842,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 157 0x9d '�' */
+ /* 157 0x9d */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x66, /* 01100110 */
@@ -2860,7 +2860,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 158 0x9e '�' */
+ /* 158 0x9e */
0x00, /* 00000000 */
0xf8, /* 11111000 */
0xcc, /* 11001100 */
@@ -2878,7 +2878,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 159 0x9f '�' */
+ /* 159 0x9f */
0x00, /* 00000000 */
0x0e, /* 00001110 */
0x1b, /* 00011011 */
@@ -2896,7 +2896,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 160 0xa0 '�' */
+ /* 160 0xa0 */
0x00, /* 00000000 */
0x18, /* 00011000 */
0x30, /* 00110000 */
@@ -2914,7 +2914,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 161 0xa1 '�' */
+ /* 161 0xa1 */
0x00, /* 00000000 */
0x0c, /* 00001100 */
0x18, /* 00011000 */
@@ -2932,7 +2932,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 162 0xa2 '�' */
+ /* 162 0xa2 */
0x00, /* 00000000 */
0x18, /* 00011000 */
0x30, /* 00110000 */
@@ -2950,7 +2950,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 163 0xa3 '�' */
+ /* 163 0xa3 */
0x00, /* 00000000 */
0x18, /* 00011000 */
0x30, /* 00110000 */
@@ -2968,7 +2968,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 164 0xa4 '�' */
+ /* 164 0xa4 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x76, /* 01110110 */
@@ -2986,7 +2986,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 165 0xa5 '�' */
+ /* 165 0xa5 */
0x76, /* 01110110 */
0xdc, /* 11011100 */
0x00, /* 00000000 */
@@ -3004,7 +3004,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 166 0xa6 '�' */
+ /* 166 0xa6 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x3c, /* 00111100 */
@@ -3022,7 +3022,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 167 0xa7 '�' */
+ /* 167 0xa7 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x38, /* 00111000 */
@@ -3040,7 +3040,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 168 0xa8 '�' */
+ /* 168 0xa8 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x30, /* 00110000 */
@@ -3058,7 +3058,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 169 0xa9 '�' */
+ /* 169 0xa9 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3076,7 +3076,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 170 0xaa '�' */
+ /* 170 0xaa */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3094,7 +3094,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 171 0xab '�' */
+ /* 171 0xab */
0x00, /* 00000000 */
0x60, /* 01100000 */
0xe0, /* 11100000 */
@@ -3112,7 +3112,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 172 0xac '�' */
+ /* 172 0xac */
0x00, /* 00000000 */
0x60, /* 01100000 */
0xe0, /* 11100000 */
@@ -3130,7 +3130,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 173 0xad '�' */
+ /* 173 0xad */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x18, /* 00011000 */
@@ -3148,7 +3148,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 174 0xae '�' */
+ /* 174 0xae */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3166,7 +3166,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 175 0xaf '�' */
+ /* 175 0xaf */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3184,7 +3184,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 176 0xb0 '�' */
+ /* 176 0xb0 */
0x11, /* 00010001 */
0x44, /* 01000100 */
0x11, /* 00010001 */
@@ -3202,7 +3202,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x11, /* 00010001 */
0x44, /* 01000100 */
- /* 177 0xb1 '�' */
+ /* 177 0xb1 */
0x55, /* 01010101 */
0xaa, /* 10101010 */
0x55, /* 01010101 */
@@ -3220,7 +3220,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x55, /* 01010101 */
0xaa, /* 10101010 */
- /* 178 0xb2 '�' */
+ /* 178 0xb2 */
0xdd, /* 11011101 */
0x77, /* 01110111 */
0xdd, /* 11011101 */
@@ -3238,7 +3238,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0xdd, /* 11011101 */
0x77, /* 01110111 */
- /* 179 0xb3 '�' */
+ /* 179 0xb3 */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3256,7 +3256,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 180 0xb4 '�' */
+ /* 180 0xb4 */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3274,7 +3274,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 181 0xb5 '�' */
+ /* 181 0xb5 */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3292,7 +3292,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 182 0xb6 '�' */
+ /* 182 0xb6 */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3310,7 +3310,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 183 0xb7 '�' */
+ /* 183 0xb7 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3328,7 +3328,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 184 0xb8 '�' */
+ /* 184 0xb8 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3346,7 +3346,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 185 0xb9 '�' */
+ /* 185 0xb9 */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3364,7 +3364,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 186 0xba '�' */
+ /* 186 0xba */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3382,7 +3382,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 187 0xbb '�' */
+ /* 187 0xbb */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3400,7 +3400,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 188 0xbc '�' */
+ /* 188 0xbc */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3418,7 +3418,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 189 0xbd '�' */
+ /* 189 0xbd */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3436,7 +3436,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 190 0xbe '�' */
+ /* 190 0xbe */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3454,7 +3454,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 191 0xbf '�' */
+ /* 191 0xbf */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3472,7 +3472,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 192 0xc0 '�' */
+ /* 192 0xc0 */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3490,7 +3490,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 193 0xc1 '�' */
+ /* 193 0xc1 */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3508,7 +3508,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 194 0xc2 '�' */
+ /* 194 0xc2 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3526,7 +3526,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 195 0xc3 '�' */
+ /* 195 0xc3 */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3544,7 +3544,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 196 0xc4 '�' */
+ /* 196 0xc4 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3562,7 +3562,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 197 0xc5 '�' */
+ /* 197 0xc5 */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3580,7 +3580,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 198 0xc6 '�' */
+ /* 198 0xc6 */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3598,7 +3598,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 199 0xc7 '�' */
+ /* 199 0xc7 */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3616,7 +3616,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 200 0xc8 '�' */
+ /* 200 0xc8 */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3634,7 +3634,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 201 0xc9 '�' */
+ /* 201 0xc9 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3652,7 +3652,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 202 0xca '�' */
+ /* 202 0xca */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3670,7 +3670,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 203 0xcb '�' */
+ /* 203 0xcb */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3688,7 +3688,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 204 0xcc '�' */
+ /* 204 0xcc */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3706,7 +3706,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 205 0xcd '�' */
+ /* 205 0xcd */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3724,7 +3724,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 206 0xce '�' */
+ /* 206 0xce */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3742,7 +3742,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 207 0xcf '�' */
+ /* 207 0xcf */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3760,7 +3760,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 208 0xd0 '�' */
+ /* 208 0xd0 */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3778,7 +3778,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 209 0xd1 '�' */
+ /* 209 0xd1 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3796,7 +3796,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 210 0xd2 '�' */
+ /* 210 0xd2 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3814,7 +3814,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 211 0xd3 '�' */
+ /* 211 0xd3 */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3832,7 +3832,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 212 0xd4 '�' */
+ /* 212 0xd4 */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3850,7 +3850,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 213 0xd5 '�' */
+ /* 213 0xd5 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3868,7 +3868,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 214 0xd6 '�' */
+ /* 214 0xd6 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3886,7 +3886,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 215 0xd7 '�' */
+ /* 215 0xd7 */
0x36, /* 00110110 */
0x36, /* 00110110 */
0x36, /* 00110110 */
@@ -3904,7 +3904,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x36, /* 00110110 */
0x36, /* 00110110 */
- /* 216 0xd8 '�' */
+ /* 216 0xd8 */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3922,7 +3922,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 217 0xd9 '�' */
+ /* 217 0xd9 */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -3940,7 +3940,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 218 0xda '�' */
+ /* 218 0xda */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3958,7 +3958,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 219 0xdb '�' */
+ /* 219 0xdb */
0xff, /* 11111111 */
0xff, /* 11111111 */
0xff, /* 11111111 */
@@ -3976,7 +3976,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0xff, /* 11111111 */
0xff, /* 11111111 */
- /* 220 0xdc '�' */
+ /* 220 0xdc */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -3994,7 +3994,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0xff, /* 11111111 */
0xff, /* 11111111 */
- /* 221 0xdd '�' */
+ /* 221 0xdd */
0xf0, /* 11110000 */
0xf0, /* 11110000 */
0xf0, /* 11110000 */
@@ -4012,7 +4012,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0xf0, /* 11110000 */
0xf0, /* 11110000 */
- /* 222 0xde '�' */
+ /* 222 0xde */
0x0f, /* 00001111 */
0x0f, /* 00001111 */
0x0f, /* 00001111 */
@@ -4030,7 +4030,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x0f, /* 00001111 */
0x0f, /* 00001111 */
- /* 223 0xdf '�' */
+ /* 223 0xdf */
0xff, /* 11111111 */
0xff, /* 11111111 */
0xff, /* 11111111 */
@@ -4048,7 +4048,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 224 0xe0 '�' */
+ /* 224 0xe0 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4066,7 +4066,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 225 0xe1 '�' */
+ /* 225 0xe1 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x78, /* 01111000 */
@@ -4084,7 +4084,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 226 0xe2 '�' */
+ /* 226 0xe2 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xfe, /* 11111110 */
@@ -4102,7 +4102,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 227 0xe3 '�' */
+ /* 227 0xe3 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4120,7 +4120,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 228 0xe4 '�' */
+ /* 228 0xe4 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0xfe, /* 11111110 */
@@ -4138,7 +4138,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 229 0xe5 '�' */
+ /* 229 0xe5 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4156,7 +4156,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 230 0xe6 '�' */
+ /* 230 0xe6 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4174,7 +4174,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0xc0, /* 11000000 */
0x00, /* 00000000 */
- /* 231 0xe7 '�' */
+ /* 231 0xe7 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4192,7 +4192,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 232 0xe8 '�' */
+ /* 232 0xe8 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x7e, /* 01111110 */
@@ -4210,7 +4210,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 233 0xe9 '�' */
+ /* 233 0xe9 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x38, /* 00111000 */
@@ -4228,7 +4228,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 234 0xea '�' */
+ /* 234 0xea */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x38, /* 00111000 */
@@ -4246,7 +4246,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 235 0xeb '�' */
+ /* 235 0xeb */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x1e, /* 00011110 */
@@ -4264,7 +4264,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 236 0xec '�' */
+ /* 236 0xec */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4282,7 +4282,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 237 0xed '�' */
+ /* 237 0xed */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4300,7 +4300,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 238 0xee '�' */
+ /* 238 0xee */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x1c, /* 00011100 */
@@ -4318,7 +4318,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 239 0xef '�' */
+ /* 239 0xef */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4336,7 +4336,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 240 0xf0 '�' */
+ /* 240 0xf0 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4354,7 +4354,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 241 0xf1 '�' */
+ /* 241 0xf1 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4372,7 +4372,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 242 0xf2 '�' */
+ /* 242 0xf2 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4390,7 +4390,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 243 0xf3 '�' */
+ /* 243 0xf3 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4408,7 +4408,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 244 0xf4 '�' */
+ /* 244 0xf4 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x0e, /* 00001110 */
@@ -4426,7 +4426,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x18, /* 00011000 */
0x18, /* 00011000 */
- /* 245 0xf5 '�' */
+ /* 245 0xf5 */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x18, /* 00011000 */
@@ -4444,7 +4444,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 246 0xf6 '�' */
+ /* 246 0xf6 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4462,7 +4462,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 247 0xf7 '�' */
+ /* 247 0xf7 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4480,7 +4480,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 248 0xf8 '�' */
+ /* 248 0xf8 */
0x00, /* 00000000 */
0x38, /* 00111000 */
0x6c, /* 01101100 */
@@ -4498,7 +4498,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 249 0xf9 '�' */
+ /* 249 0xf9 */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4516,7 +4516,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 250 0xfa '�' */
+ /* 250 0xfa */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4534,7 +4534,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 251 0xfb '�' */
+ /* 251 0xfb */
0x00, /* 00000000 */
0x0f, /* 00001111 */
0x0c, /* 00001100 */
@@ -4552,7 +4552,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 252 0xfc '�' */
+ /* 252 0xfc */
0x00, /* 00000000 */
0x6c, /* 01101100 */
0x36, /* 00110110 */
@@ -4570,7 +4570,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 253 0xfd '�' */
+ /* 253 0xfd */
0x00, /* 00000000 */
0x3c, /* 00111100 */
0x66, /* 01100110 */
@@ -4588,7 +4588,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 254 0xfe '�' */
+ /* 254 0xfe */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
@@ -4606,7 +4606,7 @@ static unsigned char __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {
0x00, /* 00000000 */
0x00, /* 00000000 */
- /* 255 0xff '�' */
+ /* 255 0xff */
0x00, /* 00000000 */
0x00, /* 00000000 */
0x00, /* 00000000 */
--
2.29.2.684.gfbc64c5ab5-goog
2
6
Summary
=======
'UpdateCapsule' is one of runtime services defined in UEFI specification
and its aim is to allow a caller (OS) to pass information to the firmware,
i.e. U-Boot. This is mostly used to update firmware binary on devices by
instructions from OS.
While 'UpdateCapsule' is a runtime services function, it is, at least
initially, supported only before exiting boot services alike other runtime
functions, [Get/]SetVariable. This is because modifying storage which may
be shared with OS must be carefully designed and there is no general
assumption that we can do it.
Therefore, we practically support only "capsule on disk"; any capsule can
be handed over to UEFI subsystem as a file on a specific file system.
In this patch series, all the related definitions and structures are given
as UEFI specification describes, and basic framework for capsule support
is provided. Currently supported is
* firmware update (Firmware Management Protocol or simply FMP)
Most of functionality of firmware update is provided by FMP driver and
it can be, by nature, system/platform-specific. So you can and should
implement your own FMP driver(s) based on your system requirements.
Under the current implementation, we provide two basic but generic
drivers with two formats:
* FIT image format (as used in TFTP update and dfu)
* raw image format
It's totally up to users which one, or both, should be used on users'
system depending on user requirements.
Quick usage
===========
1. You can create a capsule file with the following host command:
$ mkeficapsule [--fit <fit image> | --raw <raw image>] <output file>
2. Put the file under:
/EFI/UpdateCapsule of UEFI system partition
3. Specify firmware storage to be updated in "dfu_alt_info" variable
(Please follow README.dfu for details.)
==> env set dfu_alt_info '...'
4. After setting up UEFI's OsIndications variable, reboot U-Boot:
OsIndications <= EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED
Patch structure
===============
Patch#1-#6: main part of implementation
Patch#7-#8: utilities
Patch#9-#10: pytests
Patch#11: for sandbox test
[1] https://git.linaro.org/people/takahiro.akashi/u-boot.git efi/capsule
Prerequisite patches
====================
None
Test
====
* 'build' passed with gcc 10.2 for (qemu-)arm64 locally.
* passed all the pytests which are included in this patch series
on sandbox build locally.
* In Travis CI, tests skipped (or 'S', but it's not a failure, 'E' nor 'F')
because "virt-make-fs" cannot be executed.
Issues
======
* Timing of executing capsules-on-disk
Currently, processing a capsule is triggered only as part of
UEFI subsystem initialization. This means that, for example,
firmware update, may not take place at system booting time and
will potentially be delayed until a first call of any UEFI functions.
=> See patch#5 for my proposal
* A bunch of warnings like
WARNING: Use 'if (IS_ENABLED(CONFIG...))' instead of '#if or #ifdef'
where possible
I don't think that fixing those improves anything.
* Add a document in uefi.rst
TODO's
======
(Won't be addressed in this series.)
* capsule authentication
* capsule dependency (dependency expression instruction set, or depex)
* loading drivers in a capsule
* handling RESET flag in a capsule and QeuryCapsuleCaps
* full semantics of ESRT (EFI System Resource Table)
* enabling capsule API at runtime
* json capsule
* recovery from update failure
Changes
=======
v10 (November 30, 2020)
* allow for only the latest version of descriptor/format (Patch#4)
* replace all 'printf'/'EFI_PRINT' with log_xxx() (Patch#4,#5)
* fix a potential bug of overrunning 'struct
efi_firmware_management_capsule_header' (Patch#8)
* fix the version of a created capsule image to "3", removing "--version"
option of mkeficapsule command (Patch#8-#10)
v9 (November 17, 2020)
* rebased on v2021.01-rc2
* removed already-merged patches
* aligned with a function prototype change of efi_create_indexed_name()
(Patch#1-2)
# See Travis CI status in v8 below
v8 (November 13, 2020)
* fix a "not used" warning against update_load() in some configuration
(Patch#3)
* fix failures (marked as 'F') in *secure boot* test in Travis CI by
making "EFI_CAPSULE_ON_DISK_EARLY" 'default n' (Patch#8)
* fix failures (marked as 'E') at pytest setup in Travis CI by changing
a python file's name along with removing unused definitions (Patch#16)
* add Patch#18 to enable tests to be run with default sandbox config
(Patch#18)
v7 (October 29, 2020)
* rename CONFIG_DFU_ALT to CONFIG_DFU_WRITE_ALT (Patch#1,#3,#13)
v6 RESEND (October 29, 2020)
* rebased on v2021.01-rc1
v6 (September 7, 2020)
* temporarily drop the prerequisite patch[2]
* add a missing field (dependencies) in efi_api.h (but never used) (Patch#10)
* add a missing field (image_capsule_support) and related definitions
in efi_api.h (Patch#10, #15)
* cosmetic changes on constant definitions in efi_api.h (Patch#10)
* strict check for INVALID_PARAMETER at GET_IMAGE_INFO api (Patch#11,#13)
* fix warnings in pytest (Patch#16,#17)
v5 (August 3, 2020)
* removed superfluous type conversion at dfu_write_from_mem_addr()
(Patch#2)
* introduced a common helper function, efi_create_indexed_name()
(Patch#6,#7,#8)
* use efi_[get|set]_variable_int(), if necessary, with READ_ONLY
(Patch#7,#8)
* return EFI_UNSUPPORTED at Patch#7
* changed the word, number, to 'index' (Patch#7,#8)
* removed 'ifdef CONFIG_EFI_CAPSULE_ON_DISK' from a header (Patch#8)
* initialize 'CapsuleLast' in efi_init_obj_list() (Patch#7,#8)
* added 'const' qualifier for filename argument at
efi_capsule_[read|delete]_file() (Patch#8)
v4 (July 22, 2020)
* rebased to Heinrich's current efi-2020-10
* rework dfu-related code to align with Heinrich's change (Patch#1,#3)
* change a type of 'addr' argument from int to 'void *' per Sughosh's
comment (Patch#2-#3,#11-#12)
* rework/simplify pytests (Patch#15-#16)
- utilize virt-make-fs
- drop Test Case 1 (updating U-Boot environment data)
- remove useless definitions (MNT_PNT, EFI_CAPSULE_IMAGE_NAME)
- apply autopep8
v3 (July 10, 2020)
* rebased to Heinrich's current efi-2020-10-rc1
* refactor efi_firmware_[fit|raw]_get_image_info() (patch#11,#13)
v2 (June 17, 2020)
* rebased to v2020.07-rc4
* add preparatory patches for dfu (Patch#1-#5, #12)
* rework FIT capsule driver to utilize dfu_alt_info instead of CONFIG_xxx
(patch#11)
* extend get_image_info() to correspond to dfu_alt_info
(patch#11)
* add a 'raw binary' capsule support
(patch#13, #17)
* allow multiple capsule formats (with different GUIDs) to be installed
(patch#11, #13)
* extend mkeficapsule command to accept additional parameters, like
version/index/hardware instance for a capsule header info.
(patch#15)
* mkeficapsule can now also generate raw-binary capsule
(patch#16)
* add function descriptions
* apply autopep8 to pytests and fix more against pylint
v1 (April 27, 2020)
* rebased to v2020.07-rc
* removed already-merged patches (RFC's #1 to #4)
* dropped 'variable update' capsule support (RFC's patch#10)
* dropped 'variable configuration table' support (RFC's patch#11)
(Those two should be discussed separately.)
* add preparatory patches (patch#1/#2)
* fix several build errors
* rename some Kconfig options to be aligned with UEFI specification's terms
(patch#3,4,6,7)
* enforce UpdateCapsule API to be disabled after ExitBootServices (patch#3)
* use config table, runtime_services_supported, instead of variable (patch#3)
* make EFI_CAPSULE_ON_DISK buildable even if UpdateCapsule API is disabled
(patch4)
* support OsIndications, invoking capsule-on-disk only if the variable
indicates so (patch#4)
* introduced EFI_CAPSULE_ON_DISK_EARLY to invoke capsule-on-disk in U-Boot
initialization (patch#4)
* detect capsule files only if they are on EFI system partition (patch#4)
* use printf, rather than EFI_PRINT, in error cases (patch#4)
* use 'header_size' field to retrieve capsule data, adding sanity checks
against capsule size (patch#6)
* call fmpt driver interfaces with EFI_CALL (patch#6)
* remove 'variable update capsule'-related code form mkeficapsule (patch#9)
* add a test case of OsIndications not being set properly (patch#10)
* adjust test scenario for EFI_CAPSULE_ON_DISK_EARLY (patch#10)
* revise pytest scripts (patch#10)
Initial release as RFC (March 17, 2020)
AKASHI Takahiro (11):
efi_loader: define UpdateCapsule api
efi_loader: capsule: add capsule_on_disk support
efi_loader: capsule: add memory range capsule definitions
efi_loader: capsule: support firmware update
efi_loader: add firmware management protocol for FIT image
efi_loader: add firmware management protocol for raw image
cmd: add "efidebug capsule" command
tools: add mkeficapsule command for UEFI capsule update
test/py: efi_capsule: test for FIT image capsule
test/py: efi_capsule: test for raw image capsule
sandbox: enable capsule update for testing
cmd/efidebug.c | 235 +++++
common/main.c | 4 +
configs/sandbox64_defconfig | 6 +
configs/sandbox_defconfig | 6 +
include/efi_api.h | 166 ++++
include/efi_loader.h | 27 +
lib/efi_loader/Kconfig | 68 ++
lib/efi_loader/Makefile | 2 +
lib/efi_loader/efi_capsule.c | 909 ++++++++++++++++++
lib/efi_loader/efi_firmware.c | 403 ++++++++
lib/efi_loader/efi_runtime.c | 104 +-
lib/efi_loader/efi_setup.c | 76 +-
.../py/tests/test_efi_capsule/capsule_defs.py | 5 +
test/py/tests/test_efi_capsule/conftest.py | 74 ++
.../test_efi_capsule/test_capsule_firmware.py | 241 +++++
.../tests/test_efi_capsule/uboot_bin_env.its | 36 +
tools/Makefile | 2 +
tools/mkeficapsule.c | 237 +++++
18 files changed, 2547 insertions(+), 54 deletions(-)
create mode 100644 lib/efi_loader/efi_capsule.c
create mode 100644 lib/efi_loader/efi_firmware.c
create mode 100644 test/py/tests/test_efi_capsule/capsule_defs.py
create mode 100644 test/py/tests/test_efi_capsule/conftest.py
create mode 100644 test/py/tests/test_efi_capsule/test_capsule_firmware.py
create mode 100644 test/py/tests/test_efi_capsule/uboot_bin_env.its
create mode 100644 tools/mkeficapsule.c
--
2.28.0
4
16
The series was born from the need to manage the PWM backlight of the
display connected to my beaglebone board. To hit the target, I had to
develop drivers for PWM management which in turn relied on drivers for
managing timers and clocks, all developed according to the driver model.
My intention was to use the SoC-specific API only at strictly necessary
points in the code. My previous patches for migrating the AM335x display
driver to the driver model had required the implementation of additional
functions outside the concerns of the driver, (settings for dividing the
pixel clock rate, configuring the display DPLL rate, ....) not being
able to use the API of the related clock drivers. This series shouldn't
have repeated the same kind of mistake. Furthermore, I also wanted to fix
that kind of forced choice. Almost everything should have been accessible
via the driver model API. In the series there are also some patches that
could be submitted separately, but which I have however inserted to avoid
applying future patches to incorporate them.
With this last consideration, I hope I have convincingly justified the
large number of patches in the series.
The patch enabling address translation into a CPU physical address from
device-tree even in case of crossing levels with #size-cells = <0>, is
crucial for the series. The previous implementation was unable to
perform the address translation required by the am33xx device tree.
I tried to apply in a conservative way as few changes as possible and
to verify the execution of all the tests already developed, as well as
the new ones I added for the new feature.
The patch series can be cleanly applied to the HEAD of the master which
at the time of release points to ab865a8ee5c1a069f72a171270c02c99ccda7bfa
commit (Merge tag 'u-boot-imx-20201227' of https://gitlab.denx.de/u-boot/custodians/u-boot-imx).
Changes in v8:
- Imply CONFIG_TI_SYSC only if CONFIG_DM and CONFIG_OF_CONTROL are enabled.
- Revert change on cm_t335_defconfig added on version 7 of the series.
- Revert change on da850-evm-u-boot.dtsi. It was wrong and generated building
errors.
Changes in v7:
- Not all OMAP2 platform need CONFIG_TI_SYSC.
Set CONFIG_TI_SYSC as imply and disable it to fix building errors in:
nokia_rx51_defconfig
cm_t335_defconfig
- Add gd_size_cells_0 macro to fix building errors for boards that do
not use CONFIG_DM.
- Add dm8168-evm-u-boot.dtsi to fix building errors for
ti816x_evm_defconfig.
- Add linux/err.h header in am335x-fb.c to fix building errors for
brxre1_defconfig.
- Fix building errors for:
brppt1_mmc_defconfig
brppt1_nand_defconfig
brppt1_spi_defconfig
brxre1_defconfig
brsmarc1_defconfig
Changes in v6:
- Remove the 'am3-prcm' driver.
- Add the 'simple-bus' compatible string to the prcm_clocks node.
- Remove the 'am3-scm' driver.
- Add the 'simple-bus' compatible string to the scm_clocks node.
Changes in v5:
- Create drivers/clk/ti directory.
- Move the clk-ti-mux.c file to drivers/clk/ti and rename it clk-mux.c
- Move the clk-ti-am3-dpll.c file to drivers/clk/ti with the name
clk-am3-dpll.c.
- Move the clk-ti-am3-dpll-x2.c file to drivers/clk/ti with the name
clk-am3-dpll-x2.c.
- Move the clk-ti.c file to drivers/clk/ti with the name clk.c.
- Move the clk-ti.h file to drivers/clk/ti with the name clk.h.
- Move the clk-ti-divider.c file to drivers/clk/ti with the name
clk-divider.c.
- Move the clk-ti-gate.c file to drivers/clk/ti with the name
clk-gate.c.
- Move the clk-ti-ctrl.c file to drivers/clk/ti with the name
clk-ctrl.c.
Changes in v4:
- Include device_compat.h header for dev_xxx macros.
- Remove a blank line at end of file arch/arm/dts/am33xx-l4.dtsi.
- Update clk_round_rate description.
- Add Sean Anderson review.
- Include device_compat.h header for dev_xxx macros.
- Include device_compat.h header for dev_xxx macros.
- Fix compilation errors on the dev parameter of the dev_xx macros.
- Include device_compat.h header for dev_xxx macros.
- Fix compilation errors on the dev parameter of the dev_xx macros.
- Include device_compat.h header for dev_xxx macros.
- Include device_compat.h header for dev_xxx macros.
- Fix compilation errors on the dev parameter of the dev_xx macros.
- Include device_compat.h header for dev_xxx macros.
- Add Sphinx documentation for dm_flags.
- Convert GD_DM_FLG_* to enum.
- Include device_compat.h header in test/dm/test-fdt.c for dev_xxx macros.
- Include device_compat.h header for dev_xxx macros.
- Include device_compat.h header for dev_xxx macros.
- Include device_compat.h header for dev_xxx macros.
- Add Simon Glass review.
- Include device_compat.h header for dev_xxx macros.
Changes in v3:
- Remove doc/device-tree-bindings/clock/clock-bindings.txt.
- Remove doc/device-tree-bindings/clock/ti,mux.txt.
- Add to commit message the references to linux kernel dt binding
documentation.
- Remove doc/device-tree-bindings/clock/ti,dpll.txt.
- Add to commit message the references to linux kernel dt binding
documentation.
- Remove doc/device-tree-bindings/clock/ti,autoidle.txt.
- Remove doc/device-tree-bindings/clock/ti,divider.txt.
- Add to commit message the references to linux kernel dt binding
documentation.
- Remove doc/device-tree-bindings/clock/gpio-gate-clock.txt.
- Remove doc/device-tree-bindings/clock/ti,clockdomain.txt.
- Remove doc/device-tree-bindings/clock/ti,gate.txt.
- Add to commit message the references to linux kernel dt binding
documentation.
- Fix access to registers listed by device tree following resync of
am33xx-clock.dtsi with Linux 5.9-rc7.
- Remove doc/device-tree-bindings/clock/ti,clkctrl.txt.
- Add to commit message the references to linux kernel dt binding
documentation.
- doc/device-tree-bindings/arm/omap,prcm.txt.
- Add to commit message the references to linux kernel dt binding
documentation.
- Add to commit message the references to linux kernel dt binding
documentation.
- Comment dm_flags field in the global_data structure.
- Remove doc/device-tree-bindings/arm/omap,ctrl.txt.
- Remove doc/device-tree-bindings/pinctrl/pinctrl-single.txt.
- Add to commit message the references to linux kernel dt binding
documentation.
- Adds PWM_TI_EHRPWM dependency on ARCH_OMAP2PLUS in Kconfig.
- Add error message in case of invalid address.
- Remove doc/device-tree-bindings/pwm/ti,ehrpwm.txt.
- Add to commit message the references to linux kernel dt binding
documentation.
- Move Kconfig symbol from drivers/pwm to drivers/bus.
- Remove the domain clock reference from the pwmss nodes of the device
tree in am33xx.dtsi. The resync of am33xx.dtsi with Linux 5.9-rc7
already contains such references.
- Remove domain clock enabling/disabling. Enabling the domain clock is
performed by the sysc interconnect target module driver during the pwm
device probing.
- Remove doc/device-tree-bindings/pwm/ti,pwmss.txt.
- Add to commit message the references to linux kernel dt binding
documentation.
- Update the DTS lcdc node of the am335x boards because of the
am33xx.dtsi resynced with Linux 5.9-rc7.
- Remove clock domain enabling/disabling.
- Update the commit message.
- Add clk.h header.
- Fix an error code returned by the probe function.
Changes in v2:
- Add the clk_ prefix to the divider functions.
- Add kernel-doc comments to the exported functions.
- Merged to patch [09/31] clk: ti: refactor mux and divider clock
drivers.
- Remove the 'ti_am3_prcm_clocks' driver. Handle 'prcm_clocks' node in
the 'ti_am3_prcm' driver.
- Update the commit message.
- Fix a missing line in the commit message.
- Add dm_flags to global_data structure and GD_DM_FLG_SIZE_CELLS_0 macro
to test without recompiling.
- Update the OF_CHECK_COUNTS macro in order to have just one
#define by bringing the GD_DM_FLG_SIZE_CELLS_0 into the expression.
- Lower-case the 0xC019 hex number.
- Remove the 'ti_am3_scm_clocks' driver. Handle 'scm_clocks' node in
the 'ti_am3_scm' driver.
- Update the commit message.
Dario Binacchi (28):
clk: export generic routines
dt-bindings: bus: ti-sysc: resync with Linux 5.9-rc7
bus: ti: add minimal sysc interconnect target driver
arm: dts: sync am33xx with Linux 5.9-rc7
clk: add clk_round_rate()
clk: ti: add mux clock driver
arm: ti: am33xx: add DPLL_EN_FAST_RELOCK_BYPASS macro
clk: ti: am33xx: add DPLL clock drivers
clk: ti: add divider clock driver
clk: ti: add gate clock driver
arm: dts: am335x: include am33xx-u-boot.dtsi
ti: am33xx: fix do_enable_clocks() to accept NULL parameters
clk: ti: add support for clkctrl clocks
clk: ti: omap4: add clock manager driver
arm: dts: am335x: enable prcm_clocks auto binding
clk: move clk-ti-sci driver to 'ti' directory
fdt: translate address if #size-cells = <0>
omap: timer: fix the rate setting
arm: dts: am335x: enable scm_clocks auto binding
pwm: ti: am33xx: add enhanced pwm driver
bus: ti: am33xx: add pwm subsystem driver
dm: core: add a function to decode display timings
video: omap: add panel driver
video: omap: drop domain clock enabling by SOC api
video: omap: set LCD clock rate through DM API
video: omap: split the legacy code from the DM code
video: omap: move drivers to 'ti' directory
board: ti: am335x-ice: get CDCE913 clock device
arch/arm/Kconfig | 1 +
arch/arm/dts/am335x-brppt1-mmc.dts | 17 +-
arch/arm/dts/am335x-brppt1-nand.dts | 17 +-
arch/arm/dts/am335x-brppt1-spi.dts | 17 +-
arch/arm/dts/am335x-brsmarc1.dts | 20 +-
arch/arm/dts/am335x-brxre1.dts | 21 +-
arch/arm/dts/am335x-chiliboard-u-boot.dtsi | 2 +
arch/arm/dts/am335x-draco.dtsi | 11 +-
arch/arm/dts/am335x-evm-u-boot.dtsi | 17 +-
arch/arm/dts/am335x-evm.dts | 2 +-
arch/arm/dts/am335x-evmsk-u-boot.dtsi | 16 +-
arch/arm/dts/am335x-evmsk.dts | 2 +-
arch/arm/dts/am335x-guardian-u-boot.dtsi | 25 +-
arch/arm/dts/am335x-icev2-u-boot.dtsi | 3 +
arch/arm/dts/am335x-pdu001-u-boot.dtsi | 20 +-
arch/arm/dts/am335x-pxm2.dtsi | 2 +-
arch/arm/dts/am335x-pxm50-u-boot.dtsi | 16 +-
arch/arm/dts/am335x-regor-rdk-u-boot.dtsi | 2 +
arch/arm/dts/am335x-rut-u-boot.dtsi | 16 +-
arch/arm/dts/am335x-rut.dts | 2 +-
arch/arm/dts/am335x-shc-u-boot.dtsi | 2 +
arch/arm/dts/am335x-shc.dts | 2 +-
arch/arm/dts/am335x-wega-rdk-u-boot.dtsi | 2 +
arch/arm/dts/am33xx-clocks.dtsi | 106 +-
arch/arm/dts/am33xx-l4.dtsi | 1962 ++++++++++++++++++++
arch/arm/dts/am33xx-u-boot.dtsi | 8 +
arch/arm/dts/am33xx.dtsi | 721 +++----
arch/arm/dts/dm8168-evm-u-boot.dtsi | 12 +
arch/arm/include/asm/arch-am33xx/clock.h | 1 +
arch/arm/mach-omap2/am33xx/clock.c | 10 +-
arch/arm/mach-omap2/am33xx/clock_am33xx.c | 2 +-
arch/sandbox/dts/test.dts | 67 +
arch/sandbox/include/asm/clk.h | 9 +
board/BuR/common/bur_common.h | 2 +-
board/BuR/common/common.c | 2 +-
board/ti/am335x/board.c | 2 +-
board/ti/am43xx/board.c | 2 +-
common/fdt_support.c | 6 +-
configs/nokia_rx51_defconfig | 1 +
drivers/bus/Kconfig | 13 +
drivers/bus/Makefile | 2 +
drivers/bus/ti-pwmss.c | 21 +
drivers/bus/ti-sysc.c | 166 ++
drivers/clk/Kconfig | 9 +-
drivers/clk/Makefile | 2 +-
drivers/clk/clk-divider.c | 24 +-
drivers/clk/clk-uclass.c | 15 +
drivers/clk/clk_sandbox.c | 17 +
drivers/clk/clk_sandbox_test.c | 10 +
drivers/clk/ti/Kconfig | 43 +
drivers/clk/ti/Makefile | 13 +
drivers/clk/ti/clk-am3-dpll-x2.c | 79 +
drivers/clk/ti/clk-am3-dpll.c | 268 +++
drivers/clk/ti/clk-ctrl.c | 154 ++
drivers/clk/ti/clk-divider.c | 381 ++++
drivers/clk/ti/clk-gate.c | 93 +
drivers/clk/ti/clk-mux.c | 253 +++
drivers/clk/{clk-ti-sci.c => ti/clk-sci.c} | 0
drivers/clk/ti/clk.c | 34 +
drivers/clk/ti/clk.h | 13 +
drivers/clk/ti/omap4-cm.c | 22 +
drivers/core/Kconfig | 12 +
drivers/core/fdtaddr.c | 2 +-
drivers/core/of_addr.c | 13 +-
drivers/core/ofnode.c | 7 +-
drivers/core/read.c | 6 +
drivers/core/root.c | 3 +
drivers/pwm/Kconfig | 7 +
drivers/pwm/Makefile | 1 +
drivers/pwm/pwm-ti-ehrpwm.c | 468 +++++
drivers/timer/omap-timer.c | 6 +-
drivers/video/Kconfig | 5 +-
drivers/video/Makefile | 2 +-
drivers/video/ti/Kconfig | 8 +
drivers/video/ti/Makefile | 10 +
drivers/video/{ => ti}/am335x-fb.c | 341 +---
drivers/video/{ => ti}/am335x-fb.h | 4 -
drivers/video/ti/tilcdc-panel.c | 172 ++
drivers/video/ti/tilcdc-panel.h | 14 +
drivers/video/ti/tilcdc.c | 425 +++++
drivers/video/ti/tilcdc.h | 38 +
include/asm-generic/global_data.h | 24 +
include/clk-uclass.h | 8 +
include/clk.h | 28 +
include/dm/read.h | 24 +
include/dt-bindings/bus/ti-sysc.h | 6 +
include/linux/clk-provider.h | 57 +
test/dm/clk.c | 22 +
test/dm/test-fdt.c | 149 +-
89 files changed, 5676 insertions(+), 966 deletions(-)
create mode 100644 arch/arm/dts/am33xx-l4.dtsi
create mode 100644 arch/arm/dts/dm8168-evm-u-boot.dtsi
create mode 100644 drivers/bus/ti-pwmss.c
create mode 100644 drivers/bus/ti-sysc.c
create mode 100644 drivers/clk/ti/Kconfig
create mode 100644 drivers/clk/ti/Makefile
create mode 100644 drivers/clk/ti/clk-am3-dpll-x2.c
create mode 100644 drivers/clk/ti/clk-am3-dpll.c
create mode 100644 drivers/clk/ti/clk-ctrl.c
create mode 100644 drivers/clk/ti/clk-divider.c
create mode 100644 drivers/clk/ti/clk-gate.c
create mode 100644 drivers/clk/ti/clk-mux.c
rename drivers/clk/{clk-ti-sci.c => ti/clk-sci.c} (100%)
create mode 100644 drivers/clk/ti/clk.c
create mode 100644 drivers/clk/ti/clk.h
create mode 100644 drivers/clk/ti/omap4-cm.c
create mode 100644 drivers/pwm/pwm-ti-ehrpwm.c
create mode 100644 drivers/video/ti/Kconfig
create mode 100644 drivers/video/ti/Makefile
rename drivers/video/{ => ti}/am335x-fb.c (54%)
rename drivers/video/{ => ti}/am335x-fb.h (97%)
create mode 100644 drivers/video/ti/tilcdc-panel.c
create mode 100644 drivers/video/ti/tilcdc-panel.h
create mode 100644 drivers/video/ti/tilcdc.c
create mode 100644 drivers/video/ti/tilcdc.h
--
2.17.1
3
16
Hi,
this is something I had on my mind for a longer time but never got
around to actually do until now ... A while back, while working on the
patchset that led to commit c5635a032a4b ("ARM: imx8m: Don't use the
addr parameter of reset_cpu()"), I noticed that the `addr` parameter of
reset_cpu() seems to not actually hold any meaningful value. All
call-sites in the current tree just pass 0 and the vast majority of
reset_cpu() implementations actually ignore the parameter.
I dug a bit deeper to find out why this `addr` parameter exists in the
first place and found out that it's mostly a legacy artifact:
Historically, the reset_cpu() function had this `addr` parameter to
pass an address of a reset vector location, where the CPU should
reset to.
The times where this was used are long gone and the only trace it left
is some (dead) code for the NDS32 arch. The `addr` parameter lived on
and it looks like it was sometimes used as a way to indicate different
types of resets (e.g. COLD vs WARM).
Today, however, reset_cpu() is only ever called with `addr` 0 in the
mainline tree and as such, any code that gives a meaning to the `addr`
value will only ever follow the `addr == 0` branch. This is probably
not what the authors intended and as it seems quite unobvious to me,
I think the best way forward is to remove the `addr` parameter entirely.
This removes any ambiguity in the "contract" of reset_cpu() and thus
hopefully prevents more code being added which wrongly assumes that the
parameter can be used for any meaningful purpose. Instead, code which
wants to properly support multiple reset types needs to be implemented
as a sysreset driver.
I did this API change via a coccinelle patch, see "reset: Remove addr
parameter from reset_cpu()" for details. I also ran buildman for all
boards I could, to verify that everything still compiles. One notable
exception is NDS32 because I couldn't get the compiler to work there ...
Regards,
Harald
Harald Seiler (4):
nds32: Remove dead reset_cpu() implementation
board: ns3: Remove superfluous reset logic
Revert "lpc32xx: cpu: add support for soft reset"
reset: Remove addr parameter from reset_cpu()
arch/arc/lib/reset.c | 4 ++--
arch/arm/cpu/arm920t/ep93xx/cpu.c | 2 +-
arch/arm/cpu/arm920t/imx/timer.c | 2 +-
arch/arm/cpu/arm926ejs/armada100/timer.c | 2 +-
arch/arm/cpu/arm926ejs/mx25/reset.c | 2 +-
arch/arm/cpu/arm926ejs/mx27/reset.c | 2 +-
arch/arm/cpu/arm926ejs/mxs/mxs.c | 4 ++--
arch/arm/cpu/arm926ejs/spear/reset.c | 2 +-
arch/arm/cpu/arm946es/cpu.c | 2 +-
arch/arm/cpu/armv7/bcm281xx/reset.c | 2 +-
arch/arm/cpu/armv7/bcmcygnus/reset.c | 2 +-
arch/arm/cpu/armv7/bcmnsp/reset.c | 2 +-
arch/arm/cpu/armv7/ls102xa/cpu.c | 2 +-
arch/arm/cpu/armv7/s5p4418/cpu.c | 2 +-
arch/arm/cpu/armv7/stv0991/reset.c | 2 +-
arch/arm/cpu/armv7m/cpu.c | 2 +-
arch/arm/cpu/armv8/fsl-layerscape/cpu.c | 4 ++--
arch/arm/cpu/armv8/s32v234/generic.c | 2 +-
arch/arm/cpu/pxa/pxa2xx.c | 4 ++--
arch/arm/cpu/sa1100/cpu.c | 2 +-
arch/arm/lib/interrupts.c | 2 +-
arch/arm/lib/interrupts_m.c | 2 +-
arch/arm/lib/reset.c | 2 +-
arch/arm/mach-at91/arm920t/reset.c | 2 +-
arch/arm/mach-at91/arm926ejs/reset.c | 2 +-
arch/arm/mach-at91/armv7/reset.c | 2 +-
arch/arm/mach-bcm283x/reset.c | 2 +-
arch/arm/mach-davinci/reset.c | 2 +-
arch/arm/mach-exynos/soc.c | 2 +-
arch/arm/mach-imx/imx8m/soc.c | 2 +-
arch/arm/mach-imx/mx7ulp/soc.c | 2 +-
arch/arm/mach-k3/common.c | 2 +-
arch/arm/mach-keystone/ddr3.c | 4 ++--
arch/arm/mach-keystone/init.c | 2 +-
arch/arm/mach-kirkwood/cpu.c | 2 +-
arch/arm/mach-lpc32xx/cpu.c | 23 +++++-------------
arch/arm/mach-mediatek/mt7622/init.c | 2 +-
arch/arm/mach-mediatek/mt8512/init.c | 2 +-
arch/arm/mach-mediatek/mt8516/init.c | 2 +-
arch/arm/mach-mediatek/mt8518/init.c | 2 +-
arch/arm/mach-meson/board-common.c | 4 ++--
arch/arm/mach-mvebu/armada3700/cpu.c | 2 +-
arch/arm/mach-mvebu/armada8k/cpu.c | 2 +-
arch/arm/mach-mvebu/cpu.c | 2 +-
arch/arm/mach-octeontx/cpu.c | 2 +-
arch/arm/mach-octeontx2/cpu.c | 2 +-
arch/arm/mach-omap2/omap5/hwinit.c | 2 +-
arch/arm/mach-omap2/reset.c | 2 +-
arch/arm/mach-orion5x/cpu.c | 2 +-
arch/arm/mach-owl/soc.c | 2 +-
.../mach-socfpga/include/mach/reset_manager.h | 2 +-
arch/arm/mach-sunxi/board.c | 2 +-
arch/arm/mach-tegra/cmd_enterrcm.c | 2 +-
arch/arm/mach-tegra/pmc.c | 2 +-
arch/arm/mach-uniphier/arm32/psci.c | 2 +-
arch/arm/mach-uniphier/reset.c | 2 +-
arch/arm/mach-zynq/cpu.c | 2 +-
arch/arm/mach-zynqmp-r5/cpu.c | 2 +-
arch/nds32/cpu/n1213/ag101/cpu.c | 2 +-
arch/nds32/cpu/n1213/start.S | 22 -----------------
arch/nds32/lib/interrupts.c | 2 +-
arch/sandbox/cpu/sdl.c | 4 ++--
arch/sh/cpu/sh4/cpu.c | 2 +-
arch/sh/cpu/sh4/watchdog.c | 2 +-
arch/x86/cpu/ivybridge/cpu.c | 2 +-
board/BuR/brppt2/board.c | 2 +-
board/abilis/tb100/tb100.c | 2 +-
.../imx8qm_rom7720_a1/imx8qm_rom7720_a1.c | 2 +-
board/armltd/total_compute/total_compute.c | 2 +-
board/armltd/vexpress/vexpress_common.c | 2 +-
board/armltd/vexpress64/vexpress64.c | 2 +-
.../armadillo-800eva/armadillo-800eva.c | 2 +-
board/beacon/beacon-rzg2m/beacon-rzg2m.c | 2 +-
board/bosch/shc/board.c | 2 +-
board/broadcom/bcmns2/northstar2.c | 2 +-
board/broadcom/bcmns3/ns3.c | 24 +++----------------
board/broadcom/bcmstb/bcmstb.c | 2 +-
board/cavium/thunderx/thunderx.c | 2 +-
board/compulab/cm_t335/spl.c | 2 +-
board/cortina/presidio-asic/presidio.c | 2 +-
board/freescale/imx8qm_mek/imx8qm_mek.c | 2 +-
board/freescale/imx8qxp_mek/imx8qxp_mek.c | 2 +-
board/freescale/mx6memcal/spl.c | 2 +-
board/ge/b1x5v2/spl.c | 2 +-
board/highbank/highbank.c | 2 +-
board/hisilicon/hikey/hikey.c | 2 +-
board/hisilicon/hikey960/hikey960.c | 2 +-
board/hisilicon/poplar/poplar.c | 2 +-
board/kmc/kzm9g/kzm9g.c | 2 +-
board/liebherr/display5/spl.c | 2 +-
board/phytium/durian/durian.c | 2 +-
.../dragonboard410c/dragonboard410c.c | 2 +-
.../dragonboard820c/dragonboard820c.c | 2 +-
board/renesas/alt/alt.c | 2 +-
board/renesas/alt/alt_spl.c | 2 +-
board/renesas/blanche/blanche.c | 2 +-
board/renesas/condor/condor.c | 2 +-
board/renesas/draak/draak.c | 2 +-
board/renesas/eagle/eagle.c | 2 +-
board/renesas/ebisu/ebisu.c | 2 +-
board/renesas/gose/gose.c | 2 +-
board/renesas/gose/gose_spl.c | 2 +-
board/renesas/grpeach/grpeach.c | 2 +-
board/renesas/koelsch/koelsch.c | 2 +-
board/renesas/koelsch/koelsch_spl.c | 2 +-
board/renesas/lager/lager.c | 2 +-
board/renesas/lager/lager_spl.c | 2 +-
board/renesas/porter/porter.c | 2 +-
board/renesas/porter/porter_spl.c | 2 +-
board/renesas/rcar-common/gen3-spl.c | 2 +-
board/renesas/salvator-x/salvator-x.c | 2 +-
board/renesas/silk/silk.c | 2 +-
board/renesas/silk/silk_spl.c | 2 +-
board/renesas/stout/cpld.c | 2 +-
board/renesas/stout/stout_spl.c | 2 +-
board/siemens/capricorn/board.c | 2 +-
board/synopsys/emsdp/emsdp.c | 2 +-
board/synopsys/iot_devkit/iot_devkit.c | 2 +-
board/technexion/pico-imx6ul/spl.c | 2 +-
board/technexion/pico-imx7d/spl.c | 2 +-
board/toradex/apalis-imx8/apalis-imx8.c | 2 +-
board/toradex/apalis-imx8x/apalis-imx8x.c | 2 +-
board/toradex/apalis_imx6/apalis_imx6.c | 2 +-
board/toradex/colibri-imx8x/colibri-imx8x.c | 2 +-
board/toradex/colibri_imx6/colibri_imx6.c | 2 +-
board/toradex/colibri_imx7/colibri_imx7.c | 2 +-
board/xen/xenguest_arm64/xenguest_arm64.c | 2 +-
board/xilinx/versal/board.c | 2 +-
board/xilinx/zynqmp/zynqmp.c | 2 +-
cmd/tpm_test.c | 2 +-
drivers/sysreset/sysreset-uclass.c | 2 +-
drivers/watchdog/imx_watchdog.c | 2 +-
drivers/watchdog/ulp_wdog.c | 2 +-
include/cpu_func.h | 4 ++--
include/sysreset.h | 2 +-
135 files changed, 149 insertions(+), 200 deletions(-)
--
2.26.2
4
16