]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
soc: qcom: cmd-db: adjust probe for U-Boot
authorCaleb Connolly <caleb.connolly@linaro.org>
Mon, 15 Jul 2024 10:08:05 +0000 (12:08 +0200)
committerCaleb Connolly <caleb.connolly@linaro.org>
Thu, 25 Jul 2024 23:28:10 +0000 (01:28 +0200)
Integrate cmd-db into the U-Boot driver model.

This is just a wrapper around an in-memory database, so we just need to
get the address and validate that cmd-db is there.

Since cmd_db_header will be stored in the .data section we can skip
bind if it's already set.

Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
drivers/soc/qcom/cmd-db.c
include/soc/qcom/cmd-db.h

index 4317310d0bcd0a51ccd937b6935de76f0cd20b31..f707aed59adfbccf0e05c07b8303d129ef976c4e 100644 (file)
@@ -106,7 +106,7 @@ static bool cmd_db_magic_matches(const struct cmd_db_header *header)
        return memcmp(magic, CMD_DB_MAGIC, ARRAY_SIZE(CMD_DB_MAGIC)) == 0;
 }
 
-static struct cmd_db_header *cmd_db_header;
+static struct cmd_db_header *cmd_db_header __section(".data") = NULL;
 
 static inline const void *rsc_to_entry_header(const struct rsc_hdr *hdr)
 {
@@ -124,22 +124,6 @@ rsc_offset(const struct rsc_hdr *hdr, const struct entry_header *ent)
        return cmd_db_header->data + offset + loffset;
 }
 
-/**
- * cmd_db_ready - Indicates if command DB is available
- *
- * Return: 0 on success, errno otherwise
- */
-int cmd_db_ready(void)
-{
-       if (cmd_db_header == NULL)
-               return -EPROBE_DEFER;
-       else if (!cmd_db_magic_matches(cmd_db_header))
-               return -EINVAL;
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(cmd_db_ready);
-
 static int cmd_db_get_header(const char *id, const struct entry_header **eh,
                             const struct rsc_hdr **rh)
 {
@@ -195,54 +179,44 @@ u32 cmd_db_read_addr(const char *id)
 }
 EXPORT_SYMBOL_GPL(cmd_db_read_addr);
 
-static int cmd_db_dev_probe(struct platform_device *pdev)
+int cmd_db_bind(struct udevice *dev)
 {
-       struct reserved_mem *rmem;
-       int ret = 0;
+       void __iomem *base;
+       ofnode node;
 
-       rmem = of_reserved_mem_lookup(pdev->dev.of_node);
-       if (!rmem) {
-               dev_err(&pdev->dev, "failed to acquire memory region\n");
-               return -EINVAL;
-       }
+       if (cmd_db_header)
+               return 0;
 
-       cmd_db_header = memremap(rmem->base, rmem->size, MEMREMAP_WB);
-       if (!cmd_db_header) {
-               ret = -ENOMEM;
-               cmd_db_header = NULL;
-               return ret;
+       node = dev_ofnode(dev);
+
+       debug("%s(%s)\n", __func__, ofnode_get_name(node));
+
+       base = (void __iomem *)ofnode_get_addr(node);
+       if ((fdt_addr_t)base == FDT_ADDR_T_NONE) {
+               log_err("%s: Failed to read base address\n", __func__);
+               return -ENOENT;
        }
 
+       cmd_db_header = base;
        if (!cmd_db_magic_matches(cmd_db_header)) {
-               dev_err(&pdev->dev, "Invalid Command DB Magic\n");
+               log_err("%s: Invalid Command DB Magic\n", __func__);
                return -EINVAL;
        }
 
-       device_set_pm_not_required(&pdev->dev);
-
        return 0;
 }
 
-static const struct of_device_id cmd_db_match_table[] = {
+static const struct udevice_id cmd_db_ids[] = {
        { .compatible = "qcom,cmd-db" },
        { }
 };
-MODULE_DEVICE_TABLE(of, cmd_db_match_table);
-
-static struct platform_driver cmd_db_dev_driver = {
-       .probe  = cmd_db_dev_probe,
-       .driver = {
-                  .name = "cmd-db",
-                  .of_match_table = cmd_db_match_table,
-                  .suppress_bind_attrs = true,
-       },
-};
 
-static int __init cmd_db_device_init(void)
-{
-       return platform_driver_register(&cmd_db_dev_driver);
-}
-core_initcall(cmd_db_device_init);
+U_BOOT_DRIVER(qcom_cmd_db) = {
+       .name           = "qcom_cmd_db",
+       .id             = UCLASS_MISC,
+       .probe          = cmd_db_bind,
+       .of_match       = cmd_db_ids,
+};
 
 MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Command DB Driver");
 MODULE_LICENSE("GPL v2");
index 753c7923f8e52e9185b401ae3fb76304685947b4..1190f2c22cab7829cc60cce8fef47ceb97e8a4a1 100644 (file)
@@ -22,12 +22,9 @@ enum cmd_db_hw_type {
 #if IS_ENABLED(CONFIG_QCOM_COMMAND_DB)
 u32 cmd_db_read_addr(const char *resource_id);
 
-int cmd_db_ready(void);
 #else
 static inline u32 cmd_db_read_addr(const char *resource_id)
 { return 0; }
 
-static inline int cmd_db_ready(void)
-{ return -ENODEV; }
 #endif /* CONFIG_QCOM_COMMAND_DB */
 #endif /* __QCOM_COMMAND_DB_H__ */