[PATCH v4 18/39] board: dragonboard410c: import board code from mach-snapdragon
Sumit Garg
sumit.garg at linaro.org
Tue Feb 20 14:28:03 CET 2024
On Fri, 16 Feb 2024 at 02:22, Caleb Connolly <caleb.connolly at linaro.org> wrote:
>
> Some of the db410c board support code was written to be generic and
> placed in mach-snapdragon. However, as the db410c is the only board
> using this, move the code out of mach-snapdragon. This makes is more
s/makes is more/makes it more/
> obvious what code is relevant for which targets and helps tidy things up
> a little more.
>
> Reviewed-by: Neil Armstrong <neil.armstrong at linaro.org>
> Signed-off-by: Caleb Connolly <caleb.connolly at linaro.org>
> ---
> arch/arm/mach-snapdragon/Makefile | 2 -
> arch/arm/mach-snapdragon/dram.c | 99 ------------------------
> arch/arm/mach-snapdragon/include/mach/dram.h | 12 ---
> arch/arm/mach-snapdragon/include/mach/misc.h | 13 ----
> arch/arm/mach-snapdragon/misc.c | 55 -------------
> board/qualcomm/dragonboard410c/Makefile | 2 +-
> board/qualcomm/dragonboard410c/dragonboard410c.c | 48 +++++++++++-
> 7 files changed, 45 insertions(+), 186 deletions(-)
>
Reviewed-by: Sumit Garg <sumit.garg at linaro.org>
-Sumit
> diff --git a/arch/arm/mach-snapdragon/Makefile b/arch/arm/mach-snapdragon/Makefile
> index 3a3a297c1768..d02432df8b04 100644
> --- a/arch/arm/mach-snapdragon/Makefile
> +++ b/arch/arm/mach-snapdragon/Makefile
> @@ -6,6 +6,4 @@ obj-$(CONFIG_SDM845) += sysmap-sdm845.o
> obj-$(CONFIG_SDM845) += init_sdm845.o
> obj-$(CONFIG_TARGET_DRAGONBOARD820C) += sysmap-apq8096.o
> obj-$(CONFIG_TARGET_DRAGONBOARD410C) += sysmap-apq8016.o
> -obj-y += misc.o
> -obj-y += dram.o
> obj-$(CONFIG_TARGET_QCS404EVB) += sysmap-qcs404.o
> diff --git a/arch/arm/mach-snapdragon/dram.c b/arch/arm/mach-snapdragon/dram.c
> deleted file mode 100644
> index 499dfdf0da6e..000000000000
> --- a/arch/arm/mach-snapdragon/dram.c
> +++ /dev/null
> @@ -1,99 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0+
> -/*
> - * Onboard memory detection for Snapdragon boards
> - *
> - * (C) Copyright 2018 Ramon Fried <ramon.fried at gmail.com>
> - *
> - */
> -
> -#include <common.h>
> -#include <dm.h>
> -#include <log.h>
> -#include <part.h>
> -#include <smem.h>
> -#include <fdt_support.h>
> -#include <asm/arch/dram.h>
> -
> -#define SMEM_USABLE_RAM_PARTITION_TABLE 402
> -#define RAM_PART_NAME_LENGTH 16
> -#define RAM_NUM_PART_ENTRIES 32
> -#define CATEGORY_SDRAM 0x0E
> -#define TYPE_SYSMEM 0x01
> -
> -struct smem_ram_ptable_hdr {
> - u32 magic[2];
> - u32 version;
> - u32 reserved;
> - u32 len;
> -} __attribute__ ((__packed__));
> -
> -struct smem_ram_ptn {
> - char name[RAM_PART_NAME_LENGTH];
> - u64 start;
> - u64 size;
> - u32 attr;
> - u32 category;
> - u32 domain;
> - u32 type;
> - u32 num_partitions;
> - u32 reserved[3];
> -} __attribute__ ((__packed__));
> -
> -struct smem_ram_ptable {
> - struct smem_ram_ptable_hdr hdr;
> - u32 reserved; /* Added for 8 bytes alignment of header */
> - struct smem_ram_ptn parts[RAM_NUM_PART_ENTRIES];
> -} __attribute__ ((__packed__));
> -
> -#ifndef MEMORY_BANKS_MAX
> -#define MEMORY_BANKS_MAX 4
> -#endif
> -
> -int msm_fixup_memory(void *blob)
> -{
> - u64 bank_start[MEMORY_BANKS_MAX];
> - u64 bank_size[MEMORY_BANKS_MAX];
> - size_t size;
> - int i;
> - int count = 0;
> - struct udevice *smem;
> - int ret;
> - struct smem_ram_ptable *ram_ptable;
> - struct smem_ram_ptn *p;
> -
> - ret = uclass_get_device_by_name(UCLASS_SMEM, "smem", &smem);
> - if (ret < 0) {
> - printf("Failed to find SMEM node. Check device tree\n");
> - return 0;
> - }
> -
> - ram_ptable = smem_get(smem, -1, SMEM_USABLE_RAM_PARTITION_TABLE, &size);
> -
> - if (!ram_ptable) {
> - printf("Failed to find SMEM partition.\n");
> - return -ENODEV;
> - }
> -
> - /* Check validy of RAM */
> - for (i = 0; i < RAM_NUM_PART_ENTRIES; i++) {
> - p = &ram_ptable->parts[i];
> - if (p->category == CATEGORY_SDRAM && p->type == TYPE_SYSMEM) {
> - bank_start[count] = p->start;
> - bank_size[count] = p->size;
> - debug("Detected memory bank %u: start: 0x%llx size: 0x%llx\n",
> - count, p->start, p->size);
> - count++;
> - }
> - }
> -
> - if (!count) {
> - printf("Failed to detect any memory bank\n");
> - return -ENODEV;
> - }
> -
> - ret = fdt_fixup_memory_banks(blob, bank_start, bank_size, count);
> - if (ret)
> - return ret;
> -
> - return 0;
> -}
> diff --git a/arch/arm/mach-snapdragon/include/mach/dram.h b/arch/arm/mach-snapdragon/include/mach/dram.h
> deleted file mode 100644
> index 0a9eedda414c..000000000000
> --- a/arch/arm/mach-snapdragon/include/mach/dram.h
> +++ /dev/null
> @@ -1,12 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0+ */
> -/*
> - * Snapdragon DRAM
> - * Copyright (C) 2018 Ramon Fried <ramon.fried at gmail.com>
> - */
> -
> -#ifndef DRAM_H
> -#define DRAM_H
> -
> -int msm_fixup_memory(void *blob);
> -
> -#endif
> diff --git a/arch/arm/mach-snapdragon/include/mach/misc.h b/arch/arm/mach-snapdragon/include/mach/misc.h
> deleted file mode 100644
> index c60e3e472470..000000000000
> --- a/arch/arm/mach-snapdragon/include/mach/misc.h
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0+ */
> -/*
> - * Snapdragon DRAM
> - * Copyright (C) 2018 Ramon Fried <ramon.fried at gmail.com>
> - */
> -
> -#ifndef MISC_H
> -#define MISC_H
> -
> -u32 msm_board_serial(void);
> -void msm_generate_mac_addr(u8 *mac);
> -
> -#endif
> diff --git a/arch/arm/mach-snapdragon/misc.c b/arch/arm/mach-snapdragon/misc.c
> deleted file mode 100644
> index 7d452f4529b7..000000000000
> --- a/arch/arm/mach-snapdragon/misc.c
> +++ /dev/null
> @@ -1,55 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0+
> -/*
> - * Miscellaneous Snapdragon functionality
> - *
> - * (C) Copyright 2018 Ramon Fried <ramon.fried at gmail.com>
> - *
> - */
> -
> -#include <common.h>
> -#include <mmc.h>
> -#include <asm/arch/misc.h>
> -#include <asm/unaligned.h>
> -
> -/* UNSTUFF_BITS macro taken from Linux Kernel: drivers/mmc/core/sd.c */
> -#define UNSTUFF_BITS(resp, start, size) \
> - ({ \
> - const int __size = size; \
> - const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1; \
> - const int __off = 3 - ((start) / 32); \
> - const int __shft = (start) & 31; \
> - u32 __res; \
> - \
> - __res = resp[__off] >> __shft; \
> - if (__size + __shft > 32) \
> - __res |= resp[__off - 1] << ((32 - __shft) % 32); \
> - __res & __mask; \
> - })
> -
> -u32 msm_board_serial(void)
> -{
> - struct mmc *mmc_dev;
> -
> - mmc_dev = find_mmc_device(0);
> - if (!mmc_dev)
> - return 0;
> -
> - if (mmc_init(mmc_dev))
> - return 0;
> -
> - return UNSTUFF_BITS(mmc_dev->cid, 16, 32);
> -}
> -
> -void msm_generate_mac_addr(u8 *mac)
> -{
> - /* use locally adminstrated pool */
> - mac[0] = 0x02;
> - mac[1] = 0x00;
> -
> - /*
> - * Put the 32-bit serial number in the last 32-bit of the MAC address.
> - * Use big endian order so it is consistent with the serial number
> - * written as a hexadecimal string, e.g. 0x1234abcd -> 02:00:12:34:ab:cd
> - */
> - put_unaligned_be32(msm_board_serial(), &mac[2]);
> -}
> diff --git a/board/qualcomm/dragonboard410c/Makefile b/board/qualcomm/dragonboard410c/Makefile
> index 1b99c8b0efef..189f83813325 100644
> --- a/board/qualcomm/dragonboard410c/Makefile
> +++ b/board/qualcomm/dragonboard410c/Makefile
> @@ -2,4 +2,4 @@
> #
> # (C) Copyright 2015 Mateusz Kulikowski <mateusz.kulikowski at gmail.com>
>
> -obj-y := dragonboard410c.o
> +obj-y := dragonboard410c.o
> diff --git a/board/qualcomm/dragonboard410c/dragonboard410c.c b/board/qualcomm/dragonboard410c/dragonboard410c.c
> index 1adac07569ae..40b5448c6ef1 100644
> --- a/board/qualcomm/dragonboard410c/dragonboard410c.c
> +++ b/board/qualcomm/dragonboard410c/dragonboard410c.c
> @@ -12,14 +12,13 @@
> #include <dm/pinctrl.h>
> #include <env.h>
> #include <init.h>
> +#include <mmc.h>
> #include <net.h>
> #include <usb.h>
> #include <asm/cache.h>
> #include <asm/global_data.h>
> #include <asm/gpio.h>
> #include <fdt_support.h>
> -#include <asm/arch/dram.h>
> -#include <asm/arch/misc.h>
> #include <linux/delay.h>
>
> DECLARE_GLOBAL_DATA_PTR;
> @@ -55,6 +54,49 @@ int board_usb_init(int index, enum usb_init_type init)
> return 0;
> }
>
> +/* UNSTUFF_BITS macro taken from Linux Kernel: drivers/mmc/core/sd.c */
> +#define UNSTUFF_BITS(resp, start, size) \
> + ({ \
> + const int __size = size; \
> + const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1; \
> + const int __off = 3 - ((start) / 32); \
> + const int __shft = (start) & 31; \
> + u32 __res; \
> + \
> + __res = resp[__off] >> __shft; \
> + if (__size + __shft > 32) \
> + __res |= resp[__off - 1] << ((32 - __shft) % 32); \
> + __res & __mask; \
> + })
> +
> +static u32 msm_board_serial(void)
> +{
> + struct mmc *mmc_dev;
> +
> + mmc_dev = find_mmc_device(0);
> + if (!mmc_dev)
> + return 0;
> +
> + if (mmc_init(mmc_dev))
> + return 0;
> +
> + return UNSTUFF_BITS(mmc_dev->cid, 16, 32);
> +}
> +
> +static void msm_generate_mac_addr(u8 *mac)
> +{
> + /* use locally adminstrated pool */
> + mac[0] = 0x02;
> + mac[1] = 0x00;
> +
> + /*
> + * Put the 32-bit serial number in the last 32-bit of the MAC address.
> + * Use big endian order so it is consistent with the serial number
> + * written as a hexadecimal string, e.g. 0x1234abcd -> 02:00:12:34:ab:cd
> + */
> + put_unaligned_be32(msm_board_serial(), &mac[2]);
> +}
> +
> /* Check for vol- button - if pressed - stop autoboot */
> int misc_init_r(void)
> {
> @@ -103,8 +145,6 @@ int ft_board_setup(void *blob, struct bd_info *bd)
> {
> u8 mac[ARP_HLEN];
>
> - msm_fixup_memory(blob);
> -
> if (!eth_env_get_enetaddr("wlanaddr", mac)) {
> msm_generate_mac_addr(mac);
> };
>
> --
> 2.43.1
>
More information about the U-Boot
mailing list