Tool/software:
Hi TI,
I want to use MCU_ADC0 and MCU_ADC1 on TDA4. These modules are located in Module Domain LPSC15 and LPSC16 in Power Domain PD0 of WKUP_PSC0. These Module Domains are deactivated by default.
I am able to activate them manually by following the guide in chapter 5.2.2.2.1.5.2 Module State Transitions of TRM (SPRUIL1B).
Since we need these modules early on after boot, the most suitable place for activating them would be in bootloader, which is U-Boot in our case.
I came across arch/arm/mach-k3/j721e/dev-data.c, which seems to be the correct place to add these modules in the following way:
// SPDX-License-Identifier: GPL-2.0+ /* * J721E specific device platform data * * This file is auto generated. Please do not hand edit and report any issues * to Bryan Brattlof <bb@ti.com>. * * Copyright (C) 2020-2022 Texas Instruments Incorporated - https://www.ti.com/ */ #include "k3-dev.h" static struct ti_psc soc_psc_list[] = { [0] = PSC(0, 0x00400000), [1] = PSC(1, 0x42000000), }; static struct ti_pd soc_pd_list[] = { [0] = PSC_PD(0, &soc_psc_list[0], NULL), [1] = PSC_PD(14, &soc_psc_list[0], NULL), [2] = PSC_PD(15, &soc_psc_list[0], &soc_pd_list[1]), [3] = PSC_PD(16, &soc_psc_list[0], &soc_pd_list[1]), [4] = PSC_PD(0, &soc_psc_list[1], NULL), }; static struct ti_lpsc soc_lpsc_list[] = { [0] = PSC_LPSC(0, &soc_psc_list[0], &soc_pd_list[0], NULL), [1] = PSC_LPSC(7, &soc_psc_list[0], &soc_pd_list[0], NULL), [2] = PSC_LPSC(14, &soc_psc_list[0], &soc_pd_list[0], &soc_lpsc_list[3]), [3] = PSC_LPSC(15, &soc_psc_list[0], &soc_pd_list[0], NULL), [4] = PSC_LPSC(20, &soc_psc_list[0], &soc_pd_list[0], NULL), [5] = PSC_LPSC(21, &soc_psc_list[0], &soc_pd_list[0], NULL), [6] = PSC_LPSC(23, &soc_psc_list[0], &soc_pd_list[0], NULL), [7] = PSC_LPSC(25, &soc_psc_list[0], &soc_pd_list[0], NULL), [8] = PSC_LPSC(78, &soc_psc_list[0], &soc_pd_list[1], NULL), [9] = PSC_LPSC(80, &soc_psc_list[0], &soc_pd_list[2], &soc_lpsc_list[8]), [10] = PSC_LPSC(81, &soc_psc_list[0], &soc_pd_list[3], &soc_lpsc_list[8]), [11] = PSC_LPSC(0, &soc_psc_list[1], &soc_pd_list[4], NULL), [12] = PSC_LPSC(3, &soc_psc_list[1], &soc_pd_list[4], NULL), [13] = PSC_LPSC(10, &soc_psc_list[1], &soc_pd_list[4], NULL), [14] = PSC_LPSC(11, &soc_psc_list[1], &soc_pd_list[4], NULL), [15] = PSC_LPSC(12, &soc_psc_list[1], &soc_pd_list[4], NULL), [16] = PSC_LPSC(13, &soc_psc_list[1], &soc_pd_list[4], NULL), [17] = PSC_LPSC(15, &soc_psc_list[1], &soc_pd_list[4], NULL), [18] = PSC_LPSC(16, &soc_psc_list[1], &soc_pd_list[4], NULL), }; static struct ti_dev soc_dev_list[] = { PSC_DEV(30, &soc_lpsc_list[0]), PSC_DEV(61, &soc_lpsc_list[0]), PSC_DEV(146, &soc_lpsc_list[1]), PSC_DEV(279, &soc_lpsc_list[1]), PSC_DEV(283, &soc_lpsc_list[1]), PSC_DEV(90, &soc_lpsc_list[2]), PSC_DEV(47, &soc_lpsc_list[3]), PSC_DEV(288, &soc_lpsc_list[4]), PSC_DEV(289, &soc_lpsc_list[5]), PSC_DEV(92, &soc_lpsc_list[6]), PSC_DEV(91, &soc_lpsc_list[7]), PSC_DEV(4, &soc_lpsc_list[8]), PSC_DEV(202, &soc_lpsc_list[9]), PSC_DEV(203, &soc_lpsc_list[10]), PSC_DEV(102, &soc_lpsc_list[11]), PSC_DEV(103, &soc_lpsc_list[11]), PSC_DEV(104, &soc_lpsc_list[11]), PSC_DEV(154, &soc_lpsc_list[11]), PSC_DEV(149, &soc_lpsc_list[11]), PSC_DEV(113, &soc_lpsc_list[12]), PSC_DEV(197, &soc_lpsc_list[12]), PSC_DEV(103, &soc_lpsc_list[13]), PSC_DEV(104, &soc_lpsc_list[14]), PSC_DEV(102, &soc_lpsc_list[15]), PSC_DEV(117, &soc_lpsc_list[16]), PSC_DEV(0, &soc_lpsc_list[17]), PSC_DEV(1, &soc_lpsc_list[18]), }; const struct ti_k3_pd_platdata j721e_pd_platdata = { .psc = soc_psc_list, .pd = soc_pd_list, .lpsc = soc_lpsc_list, .devs = soc_dev_list, .num_psc = 2, .num_pd = 5, .num_lpsc = 19, .num_devs = 27, };
However, when using this as a boot image, the ADC modules are still powered down. I verified this by looking at register WKUP_PSC0_WKUP_PSC0_MDCTL_y (0x0x42000A00).
What would be the proper way to activate additional LPSC modules in U-Boot? Additionally, dev-data.c is marked as auto generated. Which tool was used to autogenerate this file?
Thanks for your help and best regards,
Felix