diff --git a/arch/arm/src/samv7/Make.defs b/arch/arm/src/samv7/Make.defs index 222e2466b3f..6558a04db69 100644 --- a/arch/arm/src/samv7/Make.defs +++ b/arch/arm/src/samv7/Make.defs @@ -31,7 +31,7 @@ include armv7-m/Make.defs CHIP_CSRCS = sam_start.c sam_clockconfig.c sam_irq.c sam_allocateheap.c CHIP_CSRCS += sam_lowputc.c sam_serial.c sam_gpio.c sam_pck.c sam_uid.c -CHIP_CSRCS += sam_systemreset.c +CHIP_CSRCS += sam_systemreset.c sam_chipid.c # Configuration-dependent SAMV7 files diff --git a/arch/arm/src/samv7/sam_chipid.c b/arch/arm/src/samv7/sam_chipid.c new file mode 100644 index 00000000000..faae088e4e7 --- /dev/null +++ b/arch/arm/src/samv7/sam_chipid.c @@ -0,0 +1,62 @@ +/**************************************************************************** + * arch/arm/src/samv7/sam_chipid.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include "sam_chipid.h" +#include "hardware/sam_chipid.h" +#include "arm_internal.h" + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +bool sam_has_revb_periphs(void) +{ +#ifdef CONFIG_ARCH_CHIP_PIC32CZCA70 + return true; +#else + /* If not built for PIC32CZ, decide which chip is being used */ + + uint32_t regval; + uint32_t id_arch; + uint32_t id_version; + + regval = getreg32(SAM_CHIPID_CIDR); + id_arch = (regval & CHIPID_CIDR_ARCH_MASK) >> CHIPID_CIDR_ARCH_SHIFT; + id_version = (regval & CHIPID_CIDR_VERSION_MASK) + >> CHIPID_CIDR_VERSION_SHIFT; + + /* SAMV7s are identified by 0x10-0x13, therefore + * anything else should be PIC32 + */ + + if ((id_arch & ~3) != 0x10) + { + return true; + } + + return id_version != 0; +#endif /* CONFIG_ARCH_CHIP_PIC32CZCA70 */ +} diff --git a/arch/arm/src/samv7/sam_chipid.h b/arch/arm/src/samv7/sam_chipid.h new file mode 100644 index 00000000000..6ca9a61416a --- /dev/null +++ b/arch/arm/src/samv7/sam_chipid.h @@ -0,0 +1,65 @@ +/**************************************************************************** + * arch/arm/src/samv7/sam_chipid.h + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +#ifndef __ARCH_ARM_SRC_SAMV7_SAM_CHIPID_H +#define __ARCH_ARM_SRC_SAMV7_SAM_CHIPID_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +#undef EXTERN +#if defined(__cplusplus) +#define EXTERN extern "C" +extern "C" +{ +#else +#define EXTERN extern +#endif + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +/**************************************************************************** + * Name: sam_has_revb_periphs + * + * Description: + * Returns true if revA peripherals are used, false otherwise. + *. Note: PIC32CZ CA70 are always revB. + * + ****************************************************************************/ + +bool sam_has_revb_periphs(void); + +#undef EXTERN +#if defined(__cplusplus) +} +#endif + +#endif /* __ARCH_ARM_SRC_SAMV7_SAM_CHIPID_H */