[U-Boot] [PATCH v2] ARM: am335x: Add phyCORE AM335x R2 support
Marek Vasut
marex at denx.de
Thu Apr 25 10:52:37 UTC 2019
On 4/25/19 10:32 AM, Niel Fourie wrote:
> Support for Phytech phyCORE AM335x R2 SOM (PCL060) on the Phytec
> phyBOARD-Wega AM335x.
>
> CPU : AM335X-GP rev 2.1
> Model: Phytec AM335x phyBOARD-WEGA
> DRAM: 256 MiB
> NAND: 256 MiB
> MMC: OMAP SD/MMC: 0
> eth0: ethernet at 4a100000
>
> Working:
> - Eth0
> - i2C
> - MMC/SD
> - NAND
> - UART
> - USB (host)
The Linux commit from which the DTs came is missing.
[...]
> diff --git a/arch/arm/mach-omap2/am33xx/Kconfig b/arch/arm/mach-omap2/am33xx/Kconfig
> index 500df1aa11..d6b0ea2246 100644
> --- a/arch/arm/mach-omap2/am33xx/Kconfig
> +++ b/arch/arm/mach-omap2/am33xx/Kconfig
> @@ -156,6 +156,13 @@ config TARGET_ETAMIN
> select DM_SERIAL
> imply CMD_DM
>
> +config TARGET_PHYCORE_AM335X_R2
> + bool "Support phyCORE AM335X R2"
> + select DM
> + select DM_GPIO
> + select DM_SERIAL
> + imply CMD_DM
> +
Keep the list sorted alphabetically please. (PHY... is below PCM...)
> config TARGET_PCM051
> bool "Support pcm051"
> select DM
> diff --git a/board/phytec/phycore_am335x_r2/Kconfig b/board/phytec/phycore_am335x_r2/Kconfig
> new file mode 100644
> index 0000000000..77055e043c
> --- /dev/null
> +++ b/board/phytec/phycore_am335x_r2/Kconfig
> @@ -0,0 +1,15 @@
> +if TARGET_PHYCORE_AM335X_R2
Just curious , was there ever AM335x_R1 ? Why do we use the _R2 suffix
here ?
[...]
> diff --git a/board/phytec/phycore_am335x_r2/board.c b/board/phytec/phycore_am335x_r2/board.c
> new file mode 100644
> index 0000000000..ece9edcfbd
> --- /dev/null
> +++ b/board/phytec/phycore_am335x_r2/board.c
> @@ -0,0 +1,262 @@
[...]
> +void sdram_init(void)
> +{
> + int ram_type_index = PHYCORE_R2_MT41K128M16JT_256MB;
> +
> + if (fdtdec_setup_mem_size_base())
> + gd->ram_size = SZ_256M;
Nice
> + switch (gd->ram_size) {
> + case SZ_1G:
> + ram_type_index = PHYCORE_R2_MT41K512M16HA125IT_1024MB;
> + break;
> + case SZ_512M:
> + ram_type_index = PHYCORE_R2_MT41K256M16TW107IT_512MB;
> + break;
> + case SZ_256M:
> + default:
> + ram_type_index = PHYCORE_R2_MT41K128M16JT_256MB;
Add a missing "break;" here for completeness.
> + }
> +
> + config_ddr(DDR_CLK_MHZ, &ioregs,
> + &physom_timings[ram_type_index].ddr3_data,
> + &ddr3_cmd_ctrl_data,
> + &physom_timings[ram_type_index].ddr3_emif_reg_data, 0);
> +}
> +
> +const struct dpll_params *get_dpll_mpu_params(void)
> +{
> + int ind = get_sys_clk_index();
> + int freq = am335x_get_efuse_mpu_max_freq(cdev);
> +
> + switch (freq) {
> + case MPUPLL_M_1000:
> + return &dpll_mpu_opp[ind][5];
> + case MPUPLL_M_800:
> + return &dpll_mpu_opp[ind][4];
> + case MPUPLL_M_720:
> + return &dpll_mpu_opp[ind][3];
> + case MPUPLL_M_600:
> + return &dpll_mpu_opp[ind][2];
> + case MPUPLL_M_500:
> + return &dpll_mpu_opp100;
> + case MPUPLL_M_300:
> + return &dpll_mpu_opp[ind][0];
> + }
> +
> + return &dpll_mpu_opp[ind][0];
> +}
> +
> +void scale_vcores_generic(int freq)
> +{
> + int sil_rev, mpu_vdd;
> +
> + /*
> + * We use a TPS65910 PMIC. For all MPU frequencies we support we use a
> + * CORE voltage of 1.10V. For MPU voltage we need to switch based on
> + * the frequency we are running at.
> + */
> +#ifndef CONFIG_DM_I2C
CONFIG_IS_ENABLED(DM_I2C)
> + if (i2c_probe(TPS65910_CTRL_I2C_ADDR))
> + return;
> +#else
> + if (power_tps65910_init(0))
> + return;
> +#endif
> + /*
> + * Depending on MPU clock and PG we will need a different
> + * VDD to drive at that speed.
> + */
> + sil_rev = readl(&cdev->deviceid) >> 28;
> + mpu_vdd = am335x_get_tps65910_mpu_vdd(sil_rev, freq);
> +
> + /* Tell the TPS65910 to use i2c */
> + tps65910_set_i2c_control();
> +
> + /* First update MPU voltage. */
> + if (tps65910_voltage_update(MPU, mpu_vdd))
> + return;
> +
> + /* Second, update the CORE voltage. */
> + if (tps65910_voltage_update(CORE, TPS65910_OP_REG_SEL_1_1_0))
> + return;
> +}
[...]
> diff --git a/include/configs/phycore_am335x_r2.h b/include/configs/phycore_am335x_r2.h
> new file mode 100644
> index 0000000000..a512de8838
> --- /dev/null
> +++ b/include/configs/phycore_am335x_r2.h
> @@ -0,0 +1,138 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * phycore_am335x_r2.h
> + *
> + * Phytec phyCORE-AM335x R2 (pcl060) boards information header
> + *
> + * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/
> + * Copyright (C) 2013 Lars Poeschel, Lemonage Software GmbH
> + * Copyright (C) 2019 DENX Software Engineering GmbH
> + */
> +
> +#ifndef __CONFIG_PHYCORE_AM335x_R2_H
> +#define __CONFIG_PHYCORE_AM335x_R2_H
> +
> +#include <configs/ti_am335x_common.h>
> +
> +#define CONFIG_ENV_SIZE (128 << 10) /* 128 KiB */
Use SZ_128K macro
> +#define CONFIG_MACH_TYPE MACH_TYPE_SBC_PHYCORE_AM335X
> +#define CONFIG_SYS_MMC_ENV_DEV 0
> +#define CONFIG_SYS_MMCSD_FS_BOOT_PARTITION 1
[...]
> +/* Clock Defines */
s/Defines/Macros/
> +#define V_OSCK 25000000 /* Clock output from T2 */
> +#define V_SCLK (V_OSCK)
Drop parenthesis around V_OSCK, it's just a value.
[...]
--
Best regards,
Marek Vasut
More information about the U-Boot
mailing list