First set of u-boot-atmel features for 2021.07 cycle
-----BEGIN PGP SIGNATURE----- iQFQBAABCgA6FiEEqxhEmNJ6d7ZdeFLIHrMeAg6sL8gFAmBi3oscHGV1Z2VuLmhy aXN0ZXZAbWljcm9jaGlwLmNvbQAKCRAesx4CDqwvyKr+CACDQJT4hGCDwc7XFjOw RN0aGRC6eGF4q3kL4VjBazCM1SBNs3vdVZV+bnYl3ioSNzy43K7CyFqqUlJH7CJV dakvNn71xVoQD3Xw3+I4ALibbD/tlli4vwMOeN4KlWCIdNrRrtUOQpli0M0BVDkL 0IWMDf6OLAfw1uytubsQBVitFBQoiuE3ihSphoyTOFwQdI+xsMue5uVq+O0kDqU4 gotBzmoSq5LONyNSdpHxXqujU4oXkuOr/TsVTOoRtEkQ63zVbfNWOg951is+UaHa F7f6W+cWdlb+HBs6TFb+Gva0TMmyWIH05jyIS52k6uFVM0tyFCOJFeZp81cjPP4L O3KI =ywRG -----END PGP SIGNATURE----- Merge tag 'u-boot-atmel-2021.07-a' of https://source.denx.de/u-boot/custodians/u-boot-atmel into next First set of u-boot-atmel features for 2021.07 cycle: This small feature set includes the implementation of the slew rate for the PIO4 pin controller device, and a fix for arm926ejs-based microprocessors that avoids a crash.
This commit is contained in:
commit
7d23eb9260
@ -71,10 +71,10 @@ POS1:
|
||||
str r0, [r1]
|
||||
|
||||
/* Reading the PMC Status to detect when the Main Oscillator is enabled */
|
||||
mov r4, #AT91_PMC_IXR_MOSCS
|
||||
mov r6, #AT91_PMC_IXR_MOSCS
|
||||
MOSCS_Loop:
|
||||
ldr r3, [r2]
|
||||
and r3, r4, r3
|
||||
and r3, r6, r3
|
||||
cmp r3, #AT91_PMC_IXR_MOSCS
|
||||
bne MOSCS_Loop
|
||||
|
||||
@ -89,10 +89,10 @@ MOSCS_Loop:
|
||||
str r0, [r1]
|
||||
|
||||
/* Reading the PMC Status register to detect when the PLLA is locked */
|
||||
mov r4, #AT91_PMC_IXR_LOCKA
|
||||
mov r6, #AT91_PMC_IXR_LOCKA
|
||||
MOSCS_Loop1:
|
||||
ldr r3, [r2]
|
||||
and r3, r4, r3
|
||||
and r3, r6, r3
|
||||
cmp r3, #AT91_PMC_IXR_LOCKA
|
||||
bne MOSCS_Loop1
|
||||
|
||||
@ -109,10 +109,10 @@ MOSCS_Loop1:
|
||||
str r0, [r1]
|
||||
|
||||
/* Reading the PMC Status to detect when the Master clock is ready */
|
||||
mov r4, #AT91_PMC_IXR_MCKRDY
|
||||
mov r6, #AT91_PMC_IXR_MCKRDY
|
||||
MCKRDY_Loop:
|
||||
ldr r3, [r2]
|
||||
and r3, r4, r3
|
||||
and r3, r6, r3
|
||||
cmp r3, #AT91_PMC_IXR_MCKRDY
|
||||
bne MCKRDY_Loop
|
||||
|
||||
@ -120,10 +120,10 @@ MCKRDY_Loop:
|
||||
str r0, [r1]
|
||||
|
||||
/* Reading the PMC Status to detect when the Master clock is ready */
|
||||
mov r4, #AT91_PMC_IXR_MCKRDY
|
||||
mov r6, #AT91_PMC_IXR_MCKRDY
|
||||
MCKRDY_Loop1:
|
||||
ldr r3, [r2]
|
||||
and r3, r4, r3
|
||||
and r3, r6, r3
|
||||
cmp r3, #AT91_PMC_IXR_MCKRDY
|
||||
bne MCKRDY_Loop1
|
||||
PLL_setup_end:
|
||||
|
@ -44,6 +44,7 @@ struct atmel_pio4_port {
|
||||
#define ATMEL_PIO_DIR_MASK BIT(8)
|
||||
#define ATMEL_PIO_PUEN_MASK BIT(9)
|
||||
#define ATMEL_PIO_PDEN_MASK BIT(10)
|
||||
#define ATMEL_PIO_SR BIT(11)
|
||||
#define ATMEL_PIO_IFEN_MASK BIT(12)
|
||||
#define ATMEL_PIO_IFSCEN_MASK BIT(13)
|
||||
#define ATMEL_PIO_OPD_MASK BIT(14)
|
||||
|
@ -25,9 +25,10 @@ ioset settings. Use the macros from boot/dts/<soc>-pinfunc.h file to get the
|
||||
right representation of the pin.
|
||||
|
||||
Optional properties:
|
||||
- GENERIC_PINCONFIG: generic pinconfig options to use, bias-disable,
|
||||
bias-pull-down, bias-pull-up, drive-open-drain, input-schmitt-enable,
|
||||
input-debounce.
|
||||
- GENERIC_PINCONFIG: generic pinconfig options to use:
|
||||
- bias-disable, bias-pull-down, bias-pull-up, drive-open-drain,
|
||||
input-schmitt-enable, input-debounce
|
||||
- slew-rate: 0 - disabled, 1 - enabled (default)
|
||||
- atmel,drive-strength: 0 or 1 for low drive, 2 for medium drive and 3 for
|
||||
high drive. The default value is low drive.
|
||||
|
||||
|
@ -25,6 +25,7 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
struct atmel_pio4_plat {
|
||||
struct atmel_pio4_port *reg_base;
|
||||
unsigned int slew_rate_support;
|
||||
};
|
||||
|
||||
static const struct pinconf_param conf_params[] = {
|
||||
@ -36,9 +37,11 @@ static const struct pinconf_param conf_params[] = {
|
||||
{ "input-schmitt-enable", PIN_CONFIG_INPUT_SCHMITT_ENABLE, 1 },
|
||||
{ "input-debounce", PIN_CONFIG_INPUT_DEBOUNCE, 0 },
|
||||
{ "atmel,drive-strength", PIN_CONFIG_DRIVE_STRENGTH, 0 },
|
||||
{ "slew-rate", PIN_CONFIG_SLEW_RATE, 0},
|
||||
};
|
||||
|
||||
static u32 atmel_pinctrl_get_pinconf(struct udevice *config)
|
||||
static u32 atmel_pinctrl_get_pinconf(struct udevice *config,
|
||||
struct atmel_pio4_plat *plat)
|
||||
{
|
||||
const struct pinconf_param *params;
|
||||
u32 param, arg, conf = 0;
|
||||
@ -53,6 +56,10 @@ static u32 atmel_pinctrl_get_pinconf(struct udevice *config)
|
||||
param = params->param;
|
||||
arg = params->default_value;
|
||||
|
||||
/* Keep slew rate enabled by default. */
|
||||
if (plat->slew_rate_support)
|
||||
conf |= ATMEL_PIO_SR;
|
||||
|
||||
switch (param) {
|
||||
case PIN_CONFIG_BIAS_DISABLE:
|
||||
conf &= (~ATMEL_PIO_PUEN_MASK);
|
||||
@ -91,6 +98,15 @@ static u32 atmel_pinctrl_get_pinconf(struct udevice *config)
|
||||
conf |= (val << ATMEL_PIO_DRVSTR_OFFSET)
|
||||
& ATMEL_PIO_DRVSTR_MASK;
|
||||
break;
|
||||
case PIN_CONFIG_SLEW_RATE:
|
||||
if (!plat->slew_rate_support)
|
||||
break;
|
||||
|
||||
dev_read_u32(config, params->property, &val);
|
||||
/* And disable it if requested. */
|
||||
if (val == 0)
|
||||
conf &= ~ATMEL_PIO_SR;
|
||||
break;
|
||||
default:
|
||||
printf("%s: Unsupported configuration parameter: %u\n",
|
||||
__func__, param);
|
||||
@ -116,6 +132,7 @@ static inline struct atmel_pio4_port *atmel_pio4_bank_base(struct udevice *dev,
|
||||
|
||||
static int atmel_pinctrl_set_state(struct udevice *dev, struct udevice *config)
|
||||
{
|
||||
struct atmel_pio4_plat *plat = dev_get_plat(dev);
|
||||
struct atmel_pio4_port *bank_base;
|
||||
const void *blob = gd->fdt_blob;
|
||||
int node = dev_of_offset(config);
|
||||
@ -124,7 +141,7 @@ static int atmel_pinctrl_set_state(struct udevice *dev, struct udevice *config)
|
||||
u32 i, conf;
|
||||
int count;
|
||||
|
||||
conf = atmel_pinctrl_get_pinconf(config);
|
||||
conf = atmel_pinctrl_get_pinconf(config, plat);
|
||||
|
||||
count = fdtdec_get_int_array_count(blob, node, "pinmux",
|
||||
cells, ARRAY_SIZE(cells));
|
||||
@ -164,6 +181,7 @@ const struct pinctrl_ops atmel_pinctrl_ops = {
|
||||
static int atmel_pinctrl_probe(struct udevice *dev)
|
||||
{
|
||||
struct atmel_pio4_plat *plat = dev_get_plat(dev);
|
||||
ulong priv = dev_get_driver_data(dev);
|
||||
fdt_addr_t addr_base;
|
||||
|
||||
dev = dev_get_parent(dev);
|
||||
@ -172,13 +190,15 @@ static int atmel_pinctrl_probe(struct udevice *dev)
|
||||
return -EINVAL;
|
||||
|
||||
plat->reg_base = (struct atmel_pio4_port *)addr_base;
|
||||
plat->slew_rate_support = priv;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct udevice_id atmel_pinctrl_match[] = {
|
||||
{ .compatible = "atmel,sama5d2-pinctrl" },
|
||||
{ .compatible = "microchip,sama7g5-pinctrl" },
|
||||
{ .compatible = "microchip,sama7g5-pinctrl",
|
||||
.data = (ulong)1, },
|
||||
{}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user