From: Sascha Hauer <s.hauer@pengutronix.de> To: Barebox List <barebox@lists.infradead.org> Subject: [PATCH 16/17] ARM: i.MX Phytec physom: convert to board driver Date: Thu, 6 May 2021 11:29:00 +0200 Message-ID: <20210506092901.25461-17-s.hauer@pengutronix.de> (raw) In-Reply-To: <20210506092901.25461-1-s.hauer@pengutronix.de> Board driver is the new way for board specific fixups and the physom board with its many compatible strings can really take profit from it, so convert it. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> --- arch/arm/boards/phytec-som-imx6/board.c | 150 ++++++++++++++++++------ 1 file changed, 117 insertions(+), 33 deletions(-) diff --git a/arch/arm/boards/phytec-som-imx6/board.c b/arch/arm/boards/phytec-som-imx6/board.c index bac3e8a8a1..36c4d9a78b 100644 --- a/arch/arm/boards/phytec-som-imx6/board.c +++ b/arch/arm/boards/phytec-som-imx6/board.c @@ -141,16 +141,26 @@ err_out: return ret; } -static int physom_imx6_devices_init(void) +#define IS_PHYFLEX BIT(0) +#define IS_PHYCORE BIT(1) +#define IS_PHYCARD BIT(2) +#define IS_PHYCORE_UL BIT(3) +#define HAS_MMC3 BIT(4) +#define HAS_MMC1 BIT(5) + +struct board_data { + unsigned flags; +}; + +static int physom_imx6_probe(struct device_d *dev) { int ret; char *environment_path, *default_environment_path; char *envdev, *default_envdev; + const struct board_data *brd = device_get_match_data(dev); + unsigned flags = brd->flags; - if (of_machine_is_compatible("phytec,imx6q-pfla02") - || of_machine_is_compatible("phytec,imx6dl-pfla02") - || of_machine_is_compatible("phytec,imx6s-pfla02")) { - + if (flags & IS_PHYFLEX) { phyflex_err006282_workaround(); pfla02_module_revision = get_module_rev(); @@ -164,21 +174,14 @@ static int physom_imx6_devices_init(void) imx6_bbu_internal_mmc_register_handler("mmc2", "/dev/mmc2", 0); - } else if (of_machine_is_compatible("phytec,imx6q-pcaaxl3")) { - + } else if (flags & IS_PHYCARD) { barebox_set_hostname("phyCARD-i.MX6"); default_environment_path = "/chosen/environment-nand"; default_envdev = "NAND flash"; imx6_bbu_internal_mmc_register_handler("mmc2", "/dev/mmc2", 0); - - } else if (of_machine_is_compatible("phytec,imx6q-pcm058-nand") - || of_machine_is_compatible("phytec,imx6q-pcm058-emmc") - || of_machine_is_compatible("phytec,imx6dl-pcm058-nand") - || of_machine_is_compatible("phytec,imx6qp-pcm058-nand") - || of_machine_is_compatible("phytec,imx6dl-pcm058-emmc")) { - + } else if (flags & IS_PHYCORE) { if (phycore_da9062_setup_buck_mode()) pr_err("Setting PMIC BUCK mode failed\n"); @@ -189,8 +192,7 @@ static int physom_imx6_devices_init(void) imx6_bbu_internal_mmc_register_handler("mmc0", "/dev/mmc0", 0); - } else if (of_machine_is_compatible("phytec,imx6ul-pcl063-nand") - || of_machine_is_compatible("phytec,imx6ul-pcl063-emmc")) { + } else if (flags & IS_PHYCORE_UL) { barebox_set_hostname("phyCORE-i.MX6UL"); default_environment_path = "/chosen/environment-nand"; default_envdev = "NAND flash"; @@ -201,8 +203,9 @@ static int physom_imx6_devices_init(void) imx6_bbu_internal_mmc_register_handler("mmc0", "/dev/mmc0", 0); - } else - return 0; + } else { + return -EINVAL; + } switch (bootsource_get()) { case BOOTSOURCE_MMC: @@ -234,14 +237,13 @@ static int physom_imx6_devices_init(void) pr_notice("Using environment in %s\n", envdev); - if (of_machine_is_compatible("phytec,imx6q-pcm058-emmc") - || of_machine_is_compatible("phytec,imx6dl-pcm058-emmc")) { + if (flags & HAS_MMC3) { imx6_bbu_internal_mmc_register_handler("mmc3", "/dev/mmc3", BBU_HANDLER_FLAG_DEFAULT); imx6_bbu_internal_mmcboot_register_handler("mmc3-boot", "mmc3", 0); - } else if (of_machine_is_compatible("phytec,imx6ul-pcl063-emmc")) { + } else if (flags & HAS_MMC1) { imx6_bbu_internal_mmc_register_handler("mmc1", "/dev/mmc1", BBU_HANDLER_FLAG_DEFAULT); @@ -254,23 +256,105 @@ static int physom_imx6_devices_init(void) defaultenv_append_directory(defaultenv_physom_imx6); /* Overwrite file /env/init/automount */ - if (of_machine_is_compatible("phytec,imx6q-pfla02") - || of_machine_is_compatible("phytec,imx6dl-pfla02") - || of_machine_is_compatible("phytec,imx6s-pfla02") - || of_machine_is_compatible("phytec,imx6q-pcaaxl3")) { + if (flags & IS_PHYCARD || flags & IS_PHYFLEX) { defaultenv_append_directory(defaultenv_physom_imx6); - } else if (of_machine_is_compatible("phytec,imx6qp-pcm058-nand") - || of_machine_is_compatible("phytec,imx6q-pcm058-nand") - || of_machine_is_compatible("phytec,imx6q-pcm058-emmc") - || of_machine_is_compatible("phytec,imx6dl-pcm058-nand") - || of_machine_is_compatible("phytec,imx6dl-pcm058-emmc")) { + } else if (flags & IS_PHYCORE) { defaultenv_append_directory(defaultenv_physom_imx6); defaultenv_append_directory(defaultenv_physom_imx6_phycore); - } else if (of_machine_is_compatible("phytec,imx6ul-pcl063-nand") - || of_machine_is_compatible("phytec,imx6ul-pcl063-emmc")) { + } else if (flags & IS_PHYCORE_UL) { defaultenv_append_directory(defaultenv_physom_imx6ul_phycore); } return 0; } -device_initcall(physom_imx6_devices_init); + +static struct board_data imx6q_pfla02 = { + .flags = IS_PHYFLEX, +}; + +static struct board_data imx6dl_pfla02 = { + .flags = IS_PHYFLEX, +}; + +static struct board_data imx6s_pfla02 = { + .flags = IS_PHYFLEX, +}; + +static struct board_data imx6q_pcaaxl3 = { + .flags = IS_PHYCARD, +}; + +static struct board_data imx6q_pcm058_nand = { + .flags = IS_PHYCORE, +}; + +static struct board_data imx6q_pcm058_emmc = { + .flags = IS_PHYCORE | HAS_MMC3, +}; + +static struct board_data imx6dl_pcm058_nand = { + .flags = IS_PHYCORE, +}; + +static struct board_data imx6qp_pcm058_nand = { + .flags = IS_PHYCORE, +}; + +static struct board_data imx6dl_pcm058_emmc = { + .flags = IS_PHYCORE | HAS_MMC3, +}; + +static struct board_data imx6ul_pcl063_nand = { + .flags = IS_PHYCORE_UL, +}; + +static struct board_data imx6ul_pcl063_emmc = { + .flags = IS_PHYCORE_UL | HAS_MMC1, +}; + + +static const struct of_device_id physom_imx6_match[] = { + { + .compatible = "phytec,imx6q-pfla02", + .data = &imx6q_pfla02, + }, { + .compatible = "phytec,imx6dl-pfla02", + .data = &imx6dl_pfla02, + }, { + .compatible = "phytec,imx6s-pfla02", + .data = &imx6s_pfla02, + }, { + .compatible = "phytec,imx6q-pcaaxl3", + .data = &imx6q_pcaaxl3, + }, { + .compatible = "phytec,imx6q-pcm058-nand", + .data = &imx6q_pcm058_nand, + }, { + .compatible = "phytec,imx6q-pcm058-emmc", + .data = &imx6q_pcm058_emmc, + }, { + .compatible = "phytec,imx6dl-pcm058-nand", + .data = &imx6dl_pcm058_nand, + }, { + .compatible = "phytec,imx6qp-pcm058-nand", + .data = &imx6qp_pcm058_nand, + }, { + .compatible = "phytec,imx6dl-pcm058-emmc", + .data = &imx6dl_pcm058_emmc, + }, { + .compatible = "phytec,imx6ul-pcl063-nand", + .data = &imx6ul_pcl063_nand, + }, { + .compatible = "phytec,imx6ul-pcl063-emmc", + .data = &imx6ul_pcl063_emmc, + }, + { /* Sentinel */ }, +}; + +static struct driver_d physom_imx6_driver = { + .name = "physom-imx6", + .probe = physom_imx6_probe, + .of_compatible = physom_imx6_match, +}; + +postcore_platform_driver(physom_imx6_driver); -- 2.29.2 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2021-05-06 9:31 UTC|newest] Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-05-06 9:28 [PATCH v5 00/17] barebox deep probe support Sascha Hauer 2021-05-06 9:28 ` [PATCH 01/17] imx53: remove unused imx53_add_nand Sascha Hauer 2021-05-06 9:28 ` [PATCH 02/17] of: platform: remove check of already added devices Sascha Hauer 2021-05-06 9:28 ` [PATCH 03/17] of: platform: Keep track of populated platform devices Sascha Hauer 2021-05-06 9:28 ` [PATCH 04/17] of: base: move memory init from DT to initcall Sascha Hauer 2021-05-06 9:28 ` [PATCH 05/17] of: base: move clock init from of_probe() to barebox_register_of() Sascha Hauer 2021-05-06 9:28 ` [PATCH 06/17] of: Set of_chosen and of_model earlier Sascha Hauer 2021-05-06 9:28 ` [PATCH 07/17] of: implement of_get_stdoutpath() Sascha Hauer 2021-05-06 9:28 ` [PATCH 08/17] initcall: add of_populate_initcall Sascha Hauer 2021-05-06 9:28 ` [PATCH 09/17] common: add initial barebox deep-probe support Sascha Hauer 2021-05-06 9:28 ` [PATCH 10/17] pinctrl: Find controller node first Sascha Hauer 2021-05-06 9:28 ` [PATCH 11/17] common: Explicitly probe consoles earlier with deep probe Sascha Hauer 2021-05-06 9:28 ` [PATCH 12/17] pinctrl: Add deep probe support Sascha Hauer 2021-05-06 9:28 ` [PATCH 13/17] ARM: i.MX: esdctl: add deep-probe support Sascha Hauer 2021-05-06 9:28 ` [PATCH 14/17] ARM: stm32mp: ddrctrl: " Sascha Hauer 2021-05-06 9:28 ` [PATCH 15/17] ARM: boards: mx6-sabrelite: " Sascha Hauer 2021-05-06 9:29 ` Sascha Hauer [this message] 2021-05-06 9:29 ` [PATCH 17/17] ARM: i.MX Phytec physom: Add " Sascha Hauer -- strict thread matches above, loose matches on Subject: below -- 2021-04-16 9:49 [PATCH v4 00/17] barebox deep probe support Sascha Hauer 2021-04-16 9:49 ` [PATCH 16/17] ARM: i.MX Phytec physom: convert to board driver Sascha Hauer
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210506092901.25461-17-s.hauer@pengutronix.de \ --to=s.hauer@pengutronix.de \ --cc=barebox@lists.infradead.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
mail archive of the barebox mailing list This inbox may be cloned and mirrored by anyone: git clone --mirror https://lore.barebox.org/barebox/0 barebox/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 barebox barebox/ https://lore.barebox.org/barebox \ barebox@lists.infradead.org barebox@lists.infradead.org public-inbox-index barebox Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git