From 4bda56fa9a1a148372b7253fd7ba530b023bb522 Mon Sep 17 00:00:00 2001 From: Mohamed Azhar Date: Fri, 26 Sep 2025 12:27:17 +0530 Subject: [PATCH 1/3] dts: arm: microchip: add dtsi files for Microchip PIC32CZ CA SoC series Adds common and SoC-specific .dtsi files for the Microchip PIC32CZ CA80 CA90 and CA91 family. These files define core peripherals, address maps, and interrupt controller structure shared across the PIC32CZ CA80 9x variants. Signed-off-by: Mohamed Azhar --- .../pic32cz_ca/common/pic32cz_1051_ca.dtsi | 17 ++++ .../pic32cz_ca/common/pic32cz_2051_ca.dtsi | 17 ++++ .../pic32cz_ca/common/pic32cz_4010_ca.dtsi | 17 ++++ .../pic32cz_ca/common/pic32cz_8110_ca.dtsi | 17 ++++ .../pic32c/pic32cz_ca/common/pic32cz_ca.dtsi | 79 +++++++++++++++++++ .../pic32cz_ca/common/pic32cz_ca_100.dtsi | 7 ++ .../pic32cz_ca/common/pic32cz_ca_144.dtsi | 7 ++ .../pic32cz_ca/common/pic32cz_ca_176.dtsi | 38 +++++++++ .../pic32cz_ca/common/pic32cz_ca_208.dtsi | 38 +++++++++ .../pic32cz_ca80/pic32cz2051ca80100.dtsi | 9 +++ .../pic32cz_ca80/pic32cz2051ca80144.dtsi | 9 +++ .../pic32cz_ca80/pic32cz2051ca80176.dtsi | 9 +++ .../pic32cz_ca80/pic32cz2051ca80208.dtsi | 9 +++ .../pic32cz_ca80/pic32cz4010ca80100.dtsi | 9 +++ .../pic32cz_ca80/pic32cz4010ca80144.dtsi | 9 +++ .../pic32cz_ca80/pic32cz4010ca80176.dtsi | 9 +++ .../pic32cz_ca80/pic32cz4010ca80208.dtsi | 9 +++ .../pic32cz_ca80/pic32cz8110ca80100.dtsi | 9 +++ .../pic32cz_ca80/pic32cz8110ca80144.dtsi | 9 +++ .../pic32cz_ca80/pic32cz8110ca80176.dtsi | 9 +++ .../pic32cz_ca80/pic32cz8110ca80208.dtsi | 9 +++ .../pic32cz_ca90/pic32cz2051ca90100.dtsi | 9 +++ .../pic32cz_ca90/pic32cz2051ca90144.dtsi | 9 +++ .../pic32cz_ca90/pic32cz2051ca90176.dtsi | 9 +++ .../pic32cz_ca90/pic32cz2051ca90208.dtsi | 9 +++ .../pic32cz_ca90/pic32cz4010ca90100.dtsi | 9 +++ .../pic32cz_ca90/pic32cz4010ca90144.dtsi | 9 +++ .../pic32cz_ca90/pic32cz4010ca90176.dtsi | 9 +++ .../pic32cz_ca90/pic32cz4010ca90208.dtsi | 9 +++ .../pic32cz_ca90/pic32cz8110ca90100.dtsi | 9 +++ .../pic32cz_ca90/pic32cz8110ca90144.dtsi | 9 +++ .../pic32cz_ca90/pic32cz8110ca90176.dtsi | 9 +++ .../pic32cz_ca90/pic32cz8110ca90208.dtsi | 9 +++ .../pic32cz_ca91/pic32cz2051ca91100.dtsi | 9 +++ .../pic32cz_ca91/pic32cz2051ca91144.dtsi | 9 +++ .../pic32cz_ca91/pic32cz2051ca91176.dtsi | 9 +++ .../pic32cz_ca91/pic32cz4010ca91100.dtsi | 9 +++ .../pic32cz_ca91/pic32cz4010ca91144.dtsi | 9 +++ .../pic32cz_ca91/pic32cz4010ca91176.dtsi | 9 +++ .../pic32cz_ca91/pic32cz4010ca91208.dtsi | 9 +++ 40 files changed, 516 insertions(+) create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_1051_ca.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_2051_ca.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_4010_ca.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_8110_ca.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_100.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_144.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_176.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_208.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80100.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80144.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80176.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80208.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80100.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80144.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80176.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80208.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80100.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80144.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80176.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80208.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90100.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90144.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90176.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90208.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90100.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90144.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90176.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90208.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90100.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90144.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90176.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90208.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz2051ca91100.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz2051ca91144.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz2051ca91176.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91100.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91144.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91176.dtsi create mode 100644 dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91208.dtsi diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_1051_ca.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_1051_ca.dtsi new file mode 100644 index 0000000000000..91334645d5464 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_1051_ca.dtsi @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + soc { + flash0: flash@8000000 { + reg = <0x08000000 DT_SIZE_M(1)>; + }; + + sram0: memory@20000000 { + reg = <0x20000000 DT_SIZE_K(512)>; + }; + }; +}; diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_2051_ca.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_2051_ca.dtsi new file mode 100644 index 0000000000000..01cad81f1a375 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_2051_ca.dtsi @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + soc { + flash0: flash@8000000 { + reg = <0x08000000 DT_SIZE_M(2)>; + }; + + sram0: memory@20000000 { + reg = <0x20000000 DT_SIZE_K(512)>; + }; + }; +}; diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_4010_ca.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_4010_ca.dtsi new file mode 100644 index 0000000000000..ef0c4115ee646 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_4010_ca.dtsi @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + soc { + flash0: flash@8000000 { + reg = <0x08000000 DT_SIZE_M(4)>; + }; + + sram0: memory@20000000 { + reg = <0x20000000 DT_SIZE_M(1)>; + }; + }; +}; diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_8110_ca.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_8110_ca.dtsi new file mode 100644 index 0000000000000..f592d9bcdbfcc --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_8110_ca.dtsi @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + soc { + flash0: flash@8000000 { + reg = <0x08000000 DT_SIZE_M(8)>; + }; + + sram0: memory@20000000 { + reg = <0x20000000 DT_SIZE_M(1)>; + }; + }; +}; diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca.dtsi new file mode 100644 index 0000000000000..9fdaef3a8f95e --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca.dtsi @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +/ { + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu0: cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-m7"; + reg = <0>; + #address-cells = <1>; + #size-cells = <1>; + + mpu: mpu@e000ed90 { + compatible = "arm,armv7m-mpu"; + reg = <0xe000ed90 0x40>; + }; + }; + }; + + soc { + flash0: flash@8000000 { + compatible = "soc-nv-flash"; + write-block-size = <8>; + }; + + sram0: memory@20000000 { + compatible = "mmio-sram"; + }; + + porta: gpio@44840000 { + status = "disabled"; + compatible = "microchip,port-g1-gpio"; + reg = <0x44840000 0x80>; + gpio-controller; + #gpio-cells = <2>; + #microchip,pin-cells = <2>; + }; + + portb: gpio@44840080 { + status = "disabled"; + compatible = "microchip,port-g1-gpio"; + reg = <0x44840080 0x80>; + gpio-controller; + #gpio-cells = <2>; + #microchip,pin-cells = <2>; + }; + + portc: gpio@44840100 { + status = "disabled"; + compatible = "microchip,port-g1-gpio"; + reg = <0x44840100 0x80>; + gpio-controller; + #gpio-cells = <2>; + #microchip,pin-cells = <2>; + }; + + portd: gpio@44840180 { + status = "disabled"; + compatible = "microchip,port-g1-gpio"; + reg = <0x44840180 0x80>; + gpio-controller; + #gpio-cells = <2>; + #microchip,pin-cells = <2>; + }; + }; +}; + +&nvic { + arm,num-irq-priority-bits = <3>; +}; diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_100.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_100.dtsi new file mode 100644 index 0000000000000..ffc24df06c27f --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_100.dtsi @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_144.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_144.dtsi new file mode 100644 index 0000000000000..ffc24df06c27f --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_144.dtsi @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_176.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_176.dtsi new file mode 100644 index 0000000000000..d8d8e4f8c44c3 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_176.dtsi @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + soc { + porte: gpio@44840200 { + status = "disabled"; + compatible = "microchip,port-g1-gpio"; + reg = <0x44840200 0x80>; + gpio-controller; + #gpio-cells = <2>; + #microchip,pin-cells = <2>; + }; + + portf: gpio@44840280 { + status = "disabled"; + compatible = "microchip,port-g1-gpio"; + reg = <0x44840280 0x80>; + gpio-controller; + #gpio-cells = <2>; + #microchip,pin-cells = <2>; + }; + + portg: gpio@44840300 { + status = "disabled"; + compatible = "microchip,port-g1-gpio"; + reg = <0x44840300 0x80>; + gpio-controller; + #gpio-cells = <2>; + #microchip,pin-cells = <2>; + }; + }; +}; diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_208.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_208.dtsi new file mode 100644 index 0000000000000..d8d8e4f8c44c3 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/common/pic32cz_ca_208.dtsi @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + soc { + porte: gpio@44840200 { + status = "disabled"; + compatible = "microchip,port-g1-gpio"; + reg = <0x44840200 0x80>; + gpio-controller; + #gpio-cells = <2>; + #microchip,pin-cells = <2>; + }; + + portf: gpio@44840280 { + status = "disabled"; + compatible = "microchip,port-g1-gpio"; + reg = <0x44840280 0x80>; + gpio-controller; + #gpio-cells = <2>; + #microchip,pin-cells = <2>; + }; + + portg: gpio@44840300 { + status = "disabled"; + compatible = "microchip,port-g1-gpio"; + reg = <0x44840300 0x80>; + gpio-controller; + #gpio-cells = <2>; + #microchip,pin-cells = <2>; + }; + }; +}; diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80100.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80100.dtsi new file mode 100644 index 0000000000000..2f635a4b33689 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80100.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80144.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80144.dtsi new file mode 100644 index 0000000000000..29f60b2194bd9 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80144.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80176.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80176.dtsi new file mode 100644 index 0000000000000..db11ef5defafe --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80176.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80208.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80208.dtsi new file mode 100644 index 0000000000000..fcde5e4923a91 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz2051ca80208.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80100.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80100.dtsi new file mode 100644 index 0000000000000..1531dbb0beb63 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80100.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80144.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80144.dtsi new file mode 100644 index 0000000000000..8ca3da5228e35 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80144.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80176.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80176.dtsi new file mode 100644 index 0000000000000..8ebcc3dc3d1e4 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80176.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80208.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80208.dtsi new file mode 100644 index 0000000000000..7dd5bac8da05c --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz4010ca80208.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80100.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80100.dtsi new file mode 100644 index 0000000000000..c20876e390487 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80100.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80144.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80144.dtsi new file mode 100644 index 0000000000000..55cb09f063df4 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80144.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80176.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80176.dtsi new file mode 100644 index 0000000000000..b75f0715ca1d5 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80176.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80208.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80208.dtsi new file mode 100644 index 0000000000000..cac3e7ea75d63 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca80/pic32cz8110ca80208.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90100.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90100.dtsi new file mode 100644 index 0000000000000..2f635a4b33689 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90100.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90144.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90144.dtsi new file mode 100644 index 0000000000000..29f60b2194bd9 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90144.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90176.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90176.dtsi new file mode 100644 index 0000000000000..db11ef5defafe --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90176.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90208.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90208.dtsi new file mode 100644 index 0000000000000..fcde5e4923a91 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz2051ca90208.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90100.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90100.dtsi new file mode 100644 index 0000000000000..1531dbb0beb63 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90100.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90144.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90144.dtsi new file mode 100644 index 0000000000000..8ca3da5228e35 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90144.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90176.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90176.dtsi new file mode 100644 index 0000000000000..8ebcc3dc3d1e4 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90176.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90208.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90208.dtsi new file mode 100644 index 0000000000000..7dd5bac8da05c --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz4010ca90208.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90100.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90100.dtsi new file mode 100644 index 0000000000000..c20876e390487 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90100.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90144.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90144.dtsi new file mode 100644 index 0000000000000..55cb09f063df4 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90144.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90176.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90176.dtsi new file mode 100644 index 0000000000000..b75f0715ca1d5 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90176.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90208.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90208.dtsi new file mode 100644 index 0000000000000..cac3e7ea75d63 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca90/pic32cz8110ca90208.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz2051ca91100.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz2051ca91100.dtsi new file mode 100644 index 0000000000000..2f635a4b33689 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz2051ca91100.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz2051ca91144.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz2051ca91144.dtsi new file mode 100644 index 0000000000000..29f60b2194bd9 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz2051ca91144.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz2051ca91176.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz2051ca91176.dtsi new file mode 100644 index 0000000000000..db11ef5defafe --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz2051ca91176.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91100.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91100.dtsi new file mode 100644 index 0000000000000..1531dbb0beb63 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91100.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91144.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91144.dtsi new file mode 100644 index 0000000000000..8ca3da5228e35 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91144.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91176.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91176.dtsi new file mode 100644 index 0000000000000..8ebcc3dc3d1e4 --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91176.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include diff --git a/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91208.dtsi b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91208.dtsi new file mode 100644 index 0000000000000..7dd5bac8da05c --- /dev/null +++ b/dts/arm/microchip/pic32c/pic32cz_ca/pic32cz_ca91/pic32cz4010ca91208.dtsi @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include From 4f9b026ea2ca3d5fd02ad19663e4f53261e74267 Mon Sep 17 00:00:00 2001 From: Mohamed Azhar Date: Fri, 26 Sep 2025 12:32:45 +0530 Subject: [PATCH 2/3] soc: microchip: add support for PIC32CZ CA SoC series Adds initial SoC-level support for the Microchip PIC32CZ CA80/9x series, including SoC definition files. Signed-off-by: Mohamed Azhar --- .../pic32c/pic32cz_ca/CMakeLists.txt | 6 ++ soc/microchip/pic32c/pic32cz_ca/Kconfig | 18 +++++ .../pic32c/pic32cz_ca/Kconfig.defconfig | 12 +++ soc/microchip/pic32c/pic32cz_ca/Kconfig.soc | 10 +++ .../pic32cz_ca/pic32cz_ca80/Kconfig.soc | 73 +++++++++++++++++++ .../pic32c/pic32cz_ca/pic32cz_ca80/soc.h | 44 +++++++++++ .../pic32cz_ca/pic32cz_ca90/Kconfig.soc | 73 +++++++++++++++++++ .../pic32c/pic32cz_ca/pic32cz_ca90/soc.h | 44 +++++++++++ .../pic32cz_ca/pic32cz_ca91/Kconfig.soc | 48 ++++++++++++ .../pic32c/pic32cz_ca/pic32cz_ca91/soc.h | 34 +++++++++ soc/microchip/pic32c/pic32cz_ca/soc.yml | 43 +++++++++++ 11 files changed, 405 insertions(+) create mode 100644 soc/microchip/pic32c/pic32cz_ca/CMakeLists.txt create mode 100644 soc/microchip/pic32c/pic32cz_ca/Kconfig create mode 100644 soc/microchip/pic32c/pic32cz_ca/Kconfig.defconfig create mode 100644 soc/microchip/pic32c/pic32cz_ca/Kconfig.soc create mode 100644 soc/microchip/pic32c/pic32cz_ca/pic32cz_ca80/Kconfig.soc create mode 100644 soc/microchip/pic32c/pic32cz_ca/pic32cz_ca80/soc.h create mode 100644 soc/microchip/pic32c/pic32cz_ca/pic32cz_ca90/Kconfig.soc create mode 100644 soc/microchip/pic32c/pic32cz_ca/pic32cz_ca90/soc.h create mode 100644 soc/microchip/pic32c/pic32cz_ca/pic32cz_ca91/Kconfig.soc create mode 100644 soc/microchip/pic32c/pic32cz_ca/pic32cz_ca91/soc.h create mode 100644 soc/microchip/pic32c/pic32cz_ca/soc.yml diff --git a/soc/microchip/pic32c/pic32cz_ca/CMakeLists.txt b/soc/microchip/pic32c/pic32cz_ca/CMakeLists.txt new file mode 100644 index 0000000000000..e01d600d17e54 --- /dev/null +++ b/soc/microchip/pic32c/pic32cz_ca/CMakeLists.txt @@ -0,0 +1,6 @@ +# Copyright (c) 2025 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +zephyr_include_directories(${SOC_SERIES}) + +set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/include/zephyr/arch/arm/cortex_m/scripts/linker.ld CACHE INTERNAL "") diff --git a/soc/microchip/pic32c/pic32cz_ca/Kconfig b/soc/microchip/pic32c/pic32cz_ca/Kconfig new file mode 100644 index 0000000000000..a295acedd0be2 --- /dev/null +++ b/soc/microchip/pic32c/pic32cz_ca/Kconfig @@ -0,0 +1,18 @@ +# Copyright (c) 2025 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +config SOC_FAMILY_MICROCHIP_PIC32CZ_CA + select ARM + select MICROCHIP_PIC32C + select CPU_CORTEX_M7 + select CPU_CORTEX_M_HAS_SYSTICK + select CPU_CORTEX_M_HAS_VTOR + select CPU_HAS_ARM_MPU + select CPU_HAS_FPU_DOUBLE_PRECISION + select CPU_CORTEX_M_HAS_DWT + select CPU_HAS_ICACHE + select CPU_HAS_DCACHE + select INIT_ARCH_HW_AT_BOOT + select HAS_SWO + select XIP + select HAS_POWEROFF diff --git a/soc/microchip/pic32c/pic32cz_ca/Kconfig.defconfig b/soc/microchip/pic32c/pic32cz_ca/Kconfig.defconfig new file mode 100644 index 0000000000000..b2ba9a7d3e1ec --- /dev/null +++ b/soc/microchip/pic32c/pic32cz_ca/Kconfig.defconfig @@ -0,0 +1,12 @@ +# Copyright (c) 2025 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +if SOC_FAMILY_MICROCHIP_PIC32CZ_CA + +config NUM_IRQS + default 240 + +config SYS_CLOCK_HW_CYCLES_PER_SEC + default $(dt_node_int_prop_int,/cpus/cpu@0,clock-frequency) + +endif # SOC_FAMILY_MICROCHIP_PIC32CZ_CA diff --git a/soc/microchip/pic32c/pic32cz_ca/Kconfig.soc b/soc/microchip/pic32c/pic32cz_ca/Kconfig.soc new file mode 100644 index 0000000000000..945639b777ec5 --- /dev/null +++ b/soc/microchip/pic32c/pic32cz_ca/Kconfig.soc @@ -0,0 +1,10 @@ +# Copyright (c) 2025 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +config SOC_FAMILY_MICROCHIP_PIC32CZ_CA + bool + +config SOC_FAMILY + default "microchip_pic32cz_ca" if SOC_FAMILY_MICROCHIP_PIC32CZ_CA + +rsource "*/Kconfig.soc" diff --git a/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca80/Kconfig.soc b/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca80/Kconfig.soc new file mode 100644 index 0000000000000..51de482bf882c --- /dev/null +++ b/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca80/Kconfig.soc @@ -0,0 +1,73 @@ +# Copyright (c) 2025 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +config SOC_SERIES_PIC32CZ_CA80 + bool + select SOC_FAMILY_MICROCHIP_PIC32CZ_CA + help + Enable support for Microchip PIC32CZ CA80 Cortex-M7 microcontrollers. + +config SOC_SERIES + default "pic32cz_ca80" if SOC_SERIES_PIC32CZ_CA80 + +config SOC_PIC32CZ2051CA80100 + bool + select SOC_SERIES_PIC32CZ_CA80 + +config SOC_PIC32CZ2051CA80144 + bool + select SOC_SERIES_PIC32CZ_CA80 + +config SOC_PIC32CZ2051CA80176 + bool + select SOC_SERIES_PIC32CZ_CA80 + +config SOC_PIC32CZ2051CA80208 + bool + select SOC_SERIES_PIC32CZ_CA80 + +config SOC_PIC32CZ4010CA80100 + bool + select SOC_SERIES_PIC32CZ_CA80 + +config SOC_PIC32CZ4010CA80144 + bool + select SOC_SERIES_PIC32CZ_CA80 + +config SOC_PIC32CZ4010CA80176 + bool + select SOC_SERIES_PIC32CZ_CA80 + +config SOC_PIC32CZ4010CA80208 + bool + select SOC_SERIES_PIC32CZ_CA80 + +config SOC_PIC32CZ8110CA80100 + bool + select SOC_SERIES_PIC32CZ_CA80 + +config SOC_PIC32CZ8110CA80144 + bool + select SOC_SERIES_PIC32CZ_CA80 + +config SOC_PIC32CZ8110CA80176 + bool + select SOC_SERIES_PIC32CZ_CA80 + +config SOC_PIC32CZ8110CA80208 + bool + select SOC_SERIES_PIC32CZ_CA80 + +config SOC + default "pic32cz2051ca80100" if SOC_PIC32CZ2051CA80100 + default "pic32cz2051ca80144" if SOC_PIC32CZ2051CA80144 + default "pic32cz2051ca80176" if SOC_PIC32CZ2051CA80176 + default "pic32cz2051ca80208" if SOC_PIC32CZ2051CA80208 + default "pic32cz4010ca80100" if SOC_PIC32CZ4010CA80100 + default "pic32cz4010ca80144" if SOC_PIC32CZ4010CA80144 + default "pic32cz4010ca80176" if SOC_PIC32CZ4010CA80176 + default "pic32cz4010ca80208" if SOC_PIC32CZ4010CA80208 + default "pic32cz8110ca80100" if SOC_PIC32CZ8110CA80100 + default "pic32cz8110ca80144" if SOC_PIC32CZ8110CA80144 + default "pic32cz8110ca80176" if SOC_PIC32CZ8110CA80176 + default "pic32cz8110ca80208" if SOC_PIC32CZ8110CA80208 diff --git a/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca80/soc.h b/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca80/soc.h new file mode 100644 index 0000000000000..6b35483c83037 --- /dev/null +++ b/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca80/soc.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef SOC_MICROCHIP_PIC32CZ_CA80_SOC_H_ +#define SOC_MICROCHIP_PIC32CZ_CA80_SOC_H_ + +#ifndef _ASMLANGUAGE + +#include + +#if defined(CONFIG_SOC_PIC32CZ2051CA80100) +#include +#elif defined(CONFIG_SOC_PIC32CZ2051CA80144) +#include +#elif defined(CONFIG_SOC_PIC32CZ2051CA80176) +#include +#elif defined(CONFIG_SOC_PIC32CZ2051CA80208) +#include +#elif defined(CONFIG_SOC_PIC32CZ4010CA80100) +#include +#elif defined(CONFIG_SOC_PIC32CZ4010CA80144) +#include +#elif defined(CONFIG_SOC_PIC32CZ4010CA80176) +#include +#elif defined(CONFIG_SOC_PIC32CZ4010CA80208) +#include +#elif defined(CONFIG_SOC_PIC32CZ8110CA80100) +#include +#elif defined(CONFIG_SOC_PIC32CZ8110CA80144) +#include +#elif defined(CONFIG_SOC_PIC32CZ8110CA80176) +#include +#elif defined(CONFIG_SOC_PIC32CZ8110CA80208) +#include +#else +#error "Library does not support the specified device." +#endif + +#endif /* _ASMLANGUAGE */ + +#endif /* SOC_MICROCHIP_PIC32CZ_CA80_SOC_H_ */ diff --git a/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca90/Kconfig.soc b/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca90/Kconfig.soc new file mode 100644 index 0000000000000..13caeaf7f75a4 --- /dev/null +++ b/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca90/Kconfig.soc @@ -0,0 +1,73 @@ +# Copyright (c) 2025 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +config SOC_SERIES_PIC32CZ_CA90 + bool + select SOC_FAMILY_MICROCHIP_PIC32CZ_CA + help + Enable support for Microchip PIC32CZ CA90 Cortex-M7 microcontrollers. + +config SOC_SERIES + default "pic32cz_ca90" if SOC_SERIES_PIC32CZ_CA90 + +config SOC_PIC32CZ2051CA90100 + bool + select SOC_SERIES_PIC32CZ_CA90 + +config SOC_PIC32CZ2051CA90144 + bool + select SOC_SERIES_PIC32CZ_CA90 + +config SOC_PIC32CZ2051CA90176 + bool + select SOC_SERIES_PIC32CZ_CA90 + +config SOC_PIC32CZ2051CA90208 + bool + select SOC_SERIES_PIC32CZ_CA90 + +config SOC_PIC32CZ4010CA90100 + bool + select SOC_SERIES_PIC32CZ_CA90 + +config SOC_PIC32CZ4010CA90144 + bool + select SOC_SERIES_PIC32CZ_CA90 + +config SOC_PIC32CZ4010CA90176 + bool + select SOC_SERIES_PIC32CZ_CA90 + +config SOC_PIC32CZ4010CA90208 + bool + select SOC_SERIES_PIC32CZ_CA90 + +config SOC_PIC32CZ8110CA90100 + bool + select SOC_SERIES_PIC32CZ_CA90 + +config SOC_PIC32CZ8110CA90144 + bool + select SOC_SERIES_PIC32CZ_CA90 + +config SOC_PIC32CZ8110CA90176 + bool + select SOC_SERIES_PIC32CZ_CA90 + +config SOC_PIC32CZ8110CA90208 + bool + select SOC_SERIES_PIC32CZ_CA90 + +config SOC + default "pic32cz2051ca90100" if SOC_PIC32CZ2051CA90100 + default "pic32cz2051ca90144" if SOC_PIC32CZ2051CA90144 + default "pic32cz2051ca90176" if SOC_PIC32CZ2051CA90176 + default "pic32cz2051ca90208" if SOC_PIC32CZ2051CA90208 + default "pic32cz4010ca90100" if SOC_PIC32CZ4010CA90100 + default "pic32cz4010ca90144" if SOC_PIC32CZ4010CA90144 + default "pic32cz4010ca90176" if SOC_PIC32CZ4010CA90176 + default "pic32cz4010ca90208" if SOC_PIC32CZ4010CA90208 + default "pic32cz8110ca90100" if SOC_PIC32CZ8110CA90100 + default "pic32cz8110ca90144" if SOC_PIC32CZ8110CA90144 + default "pic32cz8110ca90176" if SOC_PIC32CZ8110CA90176 + default "pic32cz8110ca90208" if SOC_PIC32CZ8110CA90208 diff --git a/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca90/soc.h b/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca90/soc.h new file mode 100644 index 0000000000000..1db0748b46794 --- /dev/null +++ b/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca90/soc.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef SOC_MICROCHIP_PIC32CZ_CA90_SOC_H_ +#define SOC_MICROCHIP_PIC32CZ_CA90_SOC_H_ + +#ifndef _ASMLANGUAGE + +#include + +#if defined(CONFIG_SOC_PIC32CZ2051CA90100) +#include +#elif defined(CONFIG_SOC_PIC32CZ2051CA90144) +#include +#elif defined(CONFIG_SOC_PIC32CZ2051CA90176) +#include +#elif defined(CONFIG_SOC_PIC32CZ2051CA90208) +#include +#elif defined(CONFIG_SOC_PIC32CZ4010CA90100) +#include +#elif defined(CONFIG_SOC_PIC32CZ4010CA90144) +#include +#elif defined(CONFIG_SOC_PIC32CZ4010CA90176) +#include +#elif defined(CONFIG_SOC_PIC32CZ4010CA90208) +#include +#elif defined(CONFIG_SOC_PIC32CZ8110CA90100) +#include +#elif defined(CONFIG_SOC_PIC32CZ8110CA90144) +#include +#elif defined(CONFIG_SOC_PIC32CZ8110CA90176) +#include +#elif defined(CONFIG_SOC_PIC32CZ8110CA90208) +#include +#else +#error "Library does not support the specified device." +#endif + +#endif /* _ASMLANGUAGE */ + +#endif /* SOC_MICROCHIP_PIC32CZ_CA90_SOC_H_ */ diff --git a/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca91/Kconfig.soc b/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca91/Kconfig.soc new file mode 100644 index 0000000000000..d6a59d595e372 --- /dev/null +++ b/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca91/Kconfig.soc @@ -0,0 +1,48 @@ +# Copyright (c) 2025 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +config SOC_SERIES_PIC32CZ_CA91 + bool + select SOC_FAMILY_MICROCHIP_PIC32CZ_CA + help + Enable support for Microchip PIC32CZ CA91 Cortex-M7 microcontrollers. + +config SOC_SERIES + default "pic32cz_ca91" if SOC_SERIES_PIC32CZ_CA91 + +config SOC_PIC32CZ2051CA91100 + bool + select SOC_SERIES_PIC32CZ_CA91 + +config SOC_PIC32CZ2051CA91144 + bool + select SOC_SERIES_PIC32CZ_CA91 + +config SOC_PIC32CZ2051CA91176 + bool + select SOC_SERIES_PIC32CZ_CA91 + +config SOC_PIC32CZ4010CA91100 + bool + select SOC_SERIES_PIC32CZ_CA91 + +config SOC_PIC32CZ4010CA91144 + bool + select SOC_SERIES_PIC32CZ_CA91 + +config SOC_PIC32CZ4010CA91176 + bool + select SOC_SERIES_PIC32CZ_CA91 + +config SOC_PIC32CZ4010CA91208 + bool + select SOC_SERIES_PIC32CZ_CA91 + +config SOC + default "pic32cz2051ca91100" if SOC_PIC32CZ2051CA91100 + default "pic32cz2051ca91144" if SOC_PIC32CZ2051CA91144 + default "pic32cz2051ca91176" if SOC_PIC32CZ2051CA91176 + default "pic32cz4010ca91100" if SOC_PIC32CZ4010CA91100 + default "pic32cz4010ca91144" if SOC_PIC32CZ4010CA91144 + default "pic32cz4010ca91176" if SOC_PIC32CZ4010CA91176 + default "pic32cz4010ca91208" if SOC_PIC32CZ4010CA91208 diff --git a/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca91/soc.h b/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca91/soc.h new file mode 100644 index 0000000000000..f5e9829da6d1d --- /dev/null +++ b/soc/microchip/pic32c/pic32cz_ca/pic32cz_ca91/soc.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef SOC_MICROCHIP_PIC32CZ_CA91_SOC_H_ +#define SOC_MICROCHIP_PIC32CZ_CA91_SOC_H_ + +#ifndef _ASMLANGUAGE + +#include + +#if defined(CONFIG_SOC_PIC32CZ2051CA91100) +#include +#elif defined(CONFIG_SOC_PIC32CZ2051CA91144) +#include +#elif defined(CONFIG_SOC_PIC32CZ2051CA91176) +#include +#elif defined(CONFIG_SOC_PIC32CZ4010CA91100) +#include +#elif defined(CONFIG_SOC_PIC32CZ4010CA91144) +#include +#elif defined(CONFIG_SOC_PIC32CZ4010CA91176) +#include +#elif defined(CONFIG_SOC_PIC32CZ4010CA91208) +#include +#else +#error "Library does not support the specified device." +#endif + +#endif /* _ASMLANGUAGE */ + +#endif /* SOC_MICROCHIP_PIC32CZ_CA91_SOC_H_ */ diff --git a/soc/microchip/pic32c/pic32cz_ca/soc.yml b/soc/microchip/pic32c/pic32cz_ca/soc.yml new file mode 100644 index 0000000000000..f3b620c660b54 --- /dev/null +++ b/soc/microchip/pic32c/pic32cz_ca/soc.yml @@ -0,0 +1,43 @@ +# Copyright (c) 2025 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +family: +- name: microchip_pic32cz_ca + series: + - name: pic32cz_ca80 + socs: + - name: pic32cz2051ca80100 + - name: pic32cz2051ca80144 + - name: pic32cz2051ca80176 + - name: pic32cz2051ca80208 + - name: pic32cz4010ca80100 + - name: pic32cz4010ca80144 + - name: pic32cz4010ca80176 + - name: pic32cz4010ca80208 + - name: pic32cz8110ca80100 + - name: pic32cz8110ca80144 + - name: pic32cz8110ca80176 + - name: pic32cz8110ca80208 + - name: pic32cz_ca90 + socs: + - name: pic32cz2051ca90100 + - name: pic32cz2051ca90144 + - name: pic32cz2051ca90176 + - name: pic32cz2051ca90208 + - name: pic32cz4010ca90100 + - name: pic32cz4010ca90144 + - name: pic32cz4010ca90176 + - name: pic32cz4010ca90208 + - name: pic32cz8110ca90100 + - name: pic32cz8110ca90144 + - name: pic32cz8110ca90176 + - name: pic32cz8110ca90208 + - name: pic32cz_ca91 + socs: + - name: pic32cz2051ca91100 + - name: pic32cz2051ca91144 + - name: pic32cz2051ca91176 + - name: pic32cz4010ca91100 + - name: pic32cz4010ca91144 + - name: pic32cz4010ca91176 + - name: pic32cz4010ca91208 From 9c443ad2b399a86f74968835d1970f5504e6a925 Mon Sep 17 00:00:00 2001 From: Mohamed Azhar Date: Mon, 29 Sep 2025 17:05:52 +0530 Subject: [PATCH 3/3] boards: microchip: add PIC32CZ CA80 Curiosity Ultra Dev Board support Add initial support for the PIC32CZ CA80 Curiosity Ultra Development Board Product page: https://www.microchip.com/en-us/development-tool/ev51s73a Signed-off-by: Mohamed Azhar --- .../Kconfig.pic32cz_ca80_cult | 5 + .../pic32c/pic32cz_ca80_cult/board.cmake | 6 ++ .../pic32c/pic32cz_ca80_cult/board.yml | 9 ++ .../doc/img/pic32cz_ca80_cult.webp | Bin 0 -> 47704 bytes .../pic32c/pic32cz_ca80_cult/doc/index.rst | 97 ++++++++++++++++++ .../pic32cz_ca80_cult/pic32cz_ca80_cult.dts | 81 +++++++++++++++ .../pic32cz_ca80_cult/pic32cz_ca80_cult.yaml | 14 +++ .../pic32cz_ca80_cult_defconfig | 5 + 8 files changed, 217 insertions(+) create mode 100644 boards/microchip/pic32c/pic32cz_ca80_cult/Kconfig.pic32cz_ca80_cult create mode 100644 boards/microchip/pic32c/pic32cz_ca80_cult/board.cmake create mode 100644 boards/microchip/pic32c/pic32cz_ca80_cult/board.yml create mode 100644 boards/microchip/pic32c/pic32cz_ca80_cult/doc/img/pic32cz_ca80_cult.webp create mode 100644 boards/microchip/pic32c/pic32cz_ca80_cult/doc/index.rst create mode 100644 boards/microchip/pic32c/pic32cz_ca80_cult/pic32cz_ca80_cult.dts create mode 100644 boards/microchip/pic32c/pic32cz_ca80_cult/pic32cz_ca80_cult.yaml create mode 100644 boards/microchip/pic32c/pic32cz_ca80_cult/pic32cz_ca80_cult_defconfig diff --git a/boards/microchip/pic32c/pic32cz_ca80_cult/Kconfig.pic32cz_ca80_cult b/boards/microchip/pic32c/pic32cz_ca80_cult/Kconfig.pic32cz_ca80_cult new file mode 100644 index 0000000000000..a8df482431f52 --- /dev/null +++ b/boards/microchip/pic32c/pic32cz_ca80_cult/Kconfig.pic32cz_ca80_cult @@ -0,0 +1,5 @@ +# Copyright (c) 2025 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_PIC32CZ_CA80_CULT + select SOC_PIC32CZ8110CA80208 diff --git a/boards/microchip/pic32c/pic32cz_ca80_cult/board.cmake b/boards/microchip/pic32c/pic32cz_ca80_cult/board.cmake new file mode 100644 index 0000000000000..d76c72d4806b5 --- /dev/null +++ b/boards/microchip/pic32c/pic32cz_ca80_cult/board.cmake @@ -0,0 +1,6 @@ +# Copyright (c) 2025 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(jlink "--device=PIC32CZ8110CA80" "--speed=4000") + +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/microchip/pic32c/pic32cz_ca80_cult/board.yml b/boards/microchip/pic32c/pic32cz_ca80_cult/board.yml new file mode 100644 index 0000000000000..d26381cc32115 --- /dev/null +++ b/boards/microchip/pic32c/pic32cz_ca80_cult/board.yml @@ -0,0 +1,9 @@ +# Copyright (c) 2025 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +board: + name: pic32cz_ca80_cult + full_name: PIC32CZ CA80 Curiosity Ultra + vendor: microchip + socs: + - name: pic32cz8110ca80208 diff --git a/boards/microchip/pic32c/pic32cz_ca80_cult/doc/img/pic32cz_ca80_cult.webp b/boards/microchip/pic32c/pic32cz_ca80_cult/doc/img/pic32cz_ca80_cult.webp new file mode 100644 index 0000000000000000000000000000000000000000..120e69cf3a0d6bbe589cf8a27005468a769d19c3 GIT binary patch literal 47704 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 tools from Segger. + - Make sure the installed J-Link executables (e.g., ``JLink``, ``JLinkGDBServer``) are available in your system's PATH. + +2. Connect the Board + + - Connect the `J32 Debug Probe `_ to the board's **CORTEX DEBUG** header. + - Connect the other end of the J32 Debug Probe to your **host machine (PC)** via USB. + - Connect the DEBUG USB port on the board to your host machine to **power up the board**. + +3. Build the Application + + You can build a sample Zephyr application, such as **Blinky**, using the ``west`` tool. Run the following commands from your Zephyr workspace: + + .. code-block:: console + + west build -b pic32cz_ca80_cult -p -s samples/basic/blinky + + This will build the Blinky application for the ``pic32cz_ca80_cult`` board. + +4. Flash the Device + + Once the build completes, flash the firmware using: + + .. code-block:: console + + west flash + + This uses the default ``jlink`` runner to flash the application to the board. + +5. Observe the Result + + After flashing, **LED0** on the board should start **blinking**, indicating that the application is running successfully. + +References +********** + +PIC32CZ CA80 Product Page: + https://www.microchip.com/en-us/product/PIC32CZ8110CA80208 + +PIC32CZ CA80 Curiosity Ultra Development Board Page: + https://www.microchip.com/en-us/development-tool/ev51s73a + +.. _PIC32CZ CA80 Curiosity Ultra User Guide: + https://ww1.microchip.com/downloads/aemDocuments/documents/MCU32/ProductDocuments/UserGuides/PIC32CZ-CA80-CA90-Curiosity-Ultra-User-Guide-DS70005522.pdf diff --git a/boards/microchip/pic32c/pic32cz_ca80_cult/pic32cz_ca80_cult.dts b/boards/microchip/pic32c/pic32cz_ca80_cult/pic32cz_ca80_cult.dts new file mode 100644 index 0000000000000..e9c286460625d --- /dev/null +++ b/boards/microchip/pic32c/pic32cz_ca80_cult/pic32cz_ca80_cult.dts @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2025 Microchip Technology Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include + +/ { + model = "PIC32CZ CA80 Curiosity Ultra"; + compatible = "pic32cz_ca80,cult", "microchip,pic32cz8110ca80208", "microchip,pic32cz"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + aliases { + led0 = &led0; + led1 = &led1; + sw0 = &button0; + sw1 = &button1; + }; + + leds { + compatible = "gpio-leds"; + + led0: led_0 { + gpios = <&portb 21 GPIO_ACTIVE_LOW>; + label = "User LED 0"; + }; + + led1: led_1 { + gpios = <&portb 22 GPIO_ACTIVE_LOW>; + label = "User LED 1"; + }; + }; + + buttons { + compatible = "gpio-keys"; + + button0: button_0 { + gpios = <&portb 24 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "SW0"; + zephyr,code = ; + }; + + button1: button_1 { + gpios = <&portc 23 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "SW1"; + zephyr,code = ; + }; + }; +}; + +&flash0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + storage_partition: partition@7fc000 { + label = "storage"; + reg = <0x0007fc000 0x4000>; + }; + }; +}; + +&cpu0 { + clock-frequency = <48000000>; +}; + +&portb { + status = "okay"; +}; + +&portc { + status = "okay"; +}; diff --git a/boards/microchip/pic32c/pic32cz_ca80_cult/pic32cz_ca80_cult.yaml b/boards/microchip/pic32c/pic32cz_ca80_cult/pic32cz_ca80_cult.yaml new file mode 100644 index 0000000000000..e1e62f62ee721 --- /dev/null +++ b/boards/microchip/pic32c/pic32cz_ca80_cult/pic32cz_ca80_cult.yaml @@ -0,0 +1,14 @@ +# Copyright (c) 2025 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +identifier: pic32cz_ca80_cult +name: PIC32CZ CA80 Curiosity Ultra +type: mcu +arch: arm +toolchain: + - zephyr +flash: 8192 +ram: 1024 +supported: + - gpio +vendor: microchip diff --git a/boards/microchip/pic32c/pic32cz_ca80_cult/pic32cz_ca80_cult_defconfig b/boards/microchip/pic32c/pic32cz_ca80_cult/pic32cz_ca80_cult_defconfig new file mode 100644 index 0000000000000..912a8e1042370 --- /dev/null +++ b/boards/microchip/pic32c/pic32cz_ca80_cult/pic32cz_ca80_cult_defconfig @@ -0,0 +1,5 @@ +# Copyright (c) 2025 Microchip Technology Inc. +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_BUILD_OUTPUT_HEX=y +CONFIG_ARM_MPU=y