Chip family specific initialization and definitions for Infineon's new generation secure chipsets CYW5591x, CYW5551x, CYW5557x and CYW43022. Signed-off-by: Gokul Sivakumar --- .../wireless/infineon/inffmac/chip_43022.c | 30 +++++++++++++++ .../wireless/infineon/inffmac/chip_43022.h | 31 ++++++++++++++++ .../wireless/infineon/inffmac/chip_5551x.c | 37 +++++++++++++++++++ .../wireless/infineon/inffmac/chip_5551x.h | 24 ++++++++++++ .../wireless/infineon/inffmac/chip_5557x.c | 31 ++++++++++++++++ .../wireless/infineon/inffmac/chip_5557x.h | 24 ++++++++++++ .../wireless/infineon/inffmac/chip_5591x.c | 33 +++++++++++++++++ .../wireless/infineon/inffmac/chip_5591x.h | 37 +++++++++++++++++++ 8 files changed, 247 insertions(+) create mode 100644 drivers/net/wireless/infineon/inffmac/chip_43022.c create mode 100644 drivers/net/wireless/infineon/inffmac/chip_43022.h create mode 100644 drivers/net/wireless/infineon/inffmac/chip_5551x.c create mode 100644 drivers/net/wireless/infineon/inffmac/chip_5551x.h create mode 100644 drivers/net/wireless/infineon/inffmac/chip_5557x.c create mode 100644 drivers/net/wireless/infineon/inffmac/chip_5557x.h create mode 100644 drivers/net/wireless/infineon/inffmac/chip_5591x.c create mode 100644 drivers/net/wireless/infineon/inffmac/chip_5591x.h diff --git a/drivers/net/wireless/infineon/inffmac/chip_43022.c b/drivers/net/wireless/infineon/inffmac/chip_43022.c new file mode 100644 index 000000000000..b32a5da06a59 --- /dev/null +++ b/drivers/net/wireless/infineon/inffmac/chip_43022.c @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: ISC +/* + * Copyright (c) 2024-2026, Infineon Technologies AG, or an affiliate of Infineon Technologies AG. + * All rights reserved. + */ + +#include "chip_43022.h" + +void inff_chip_43022_init(struct inff_chip *chip) +{ + struct inff_chip_specific *chip_spec = &chip->chip_spec; + struct inff_fw_dataset *fw_data = &chip_spec->fwdata[0]; + + chip_spec->hw_caps_replaycnts = INF43022_HW_CAPS_REPLAYCNTS; + chip_spec->hw_reg_pmu_status_msk = INF43022_PMU_STATUS_MASK; + chip_spec->hw_reg_pmu_ctrl_ext_msk = INF43022_PMU_CONTROL_EXT_MASK; + chip_spec->hw_chip_ramsize = INF43022_CHIP_RAMSIZE; + + fw_data[INFF_FW_CODE].fwnames.extension = ".trxs"; + fw_data[INFF_FW_CODE].fwnames.path = chip_spec->fw_name; + fw_data[INFF_FW_CODE].type = INFF_FW_TYPE_TRXS; + + fw_data[INFF_FW_NVRAM].fwnames.extension = ".txt"; + fw_data[INFF_FW_NVRAM].fwnames.path = chip_spec->nvram_name; + fw_data[INFF_FW_NVRAM].type = INFF_FW_TYPE_NVRAM; + + fw_data[INFF_FW_CLM].fwnames.extension = ".clm_blob"; + fw_data[INFF_FW_CLM].fwnames.path = chip_spec->clm_name; + fw_data[INFF_FW_CLM].type = INFF_FW_TYPE_CLM; +} diff --git a/drivers/net/wireless/infineon/inffmac/chip_43022.h b/drivers/net/wireless/infineon/inffmac/chip_43022.h new file mode 100644 index 000000000000..3165b9655967 --- /dev/null +++ b/drivers/net/wireless/infineon/inffmac/chip_43022.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: ISC */ +/* + * Copyright (c) 2024-2026, Infineon Technologies AG, or an affiliate of Infineon Technologies AG. + * All rights reserved. + */ + +#include "chip.h" + +/* PMU STATUS mask for 43022 */ +#define INF43022_PMU_STATUS_MASK 0x1AC + +/* PMU CONTROL EXT mask for 43002 */ +#define INF43022_PMU_CONTROL_EXT_MASK 0x11 + +/* Minimum PMU resource mask for 43022 */ +#define INF43022_PMU_MIN_RES_MASK 0xF8BFE77 + +#define INF43022_CHIP_RAMSIZE 0xA0000 + +/* chip specific settings */ +#define INF43022_HW_CAPS_REPLAYCNTS 4 + +/* INF43022 watermark expressed in number of words */ +#define INF43022_F2_WATERMARK 0x60 +#define INF43022_MES_WATERMARK 0x50 +#define INF43022_MESBUSYCTRL (INF43022_MES_WATERMARK | \ + SBSDIO_MESBUSYCTRL_ENAB) + +#define INF43022_DEFAULT_MIN_RES_MASK 0x0f8bfe77 + +void inff_chip_43022_init(struct inff_chip *chip); diff --git a/drivers/net/wireless/infineon/inffmac/chip_5551x.c b/drivers/net/wireless/infineon/inffmac/chip_5551x.c new file mode 100644 index 000000000000..ccd9ce875d87 --- /dev/null +++ b/drivers/net/wireless/infineon/inffmac/chip_5551x.c @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: ISC +/* + * Copyright (c) 2024-2026, Infineon Technologies AG, or an affiliate of Infineon Technologies AG. + * All rights reserved. + */ + +#include "chip_5551x.h" + +void inff_chip_5551x_init(struct inff_chip *chip) +{ + struct inff_chip_specific *chip_spec = &chip->chip_spec; + struct inff_fw_dataset *fw_data = &chip_spec->fwdata[0]; + + chip_spec->hw_caps_replaycnts = INFF_CHIP_COMMON_HW_CAPS_REPLAYCNTS; + + if (chip->chiprev == 0) { + chip_spec->hw_chip_tcam_size = INF55500_TCAM_SIZE; + chip_spec->hw_chip_trxhdr_size = INF55500_TRXHDR_SIZE; + chip_spec->hw_chip_rambase = INF55500_RAM_BASE; + } else { + chip_spec->hw_chip_tcam_size = INF55500_A1_TCAM_SIZE; + chip_spec->hw_chip_trxhdr_size = INF55500_A1_TRXHDR_SIZE; + chip_spec->hw_chip_rambase = INF55500_A1_RAM_BASE; + } + + fw_data[INFF_FW_CODE].fwnames.extension = ".trxse"; + fw_data[INFF_FW_CODE].fwnames.path = chip_spec->fw_name; + fw_data[INFF_FW_CODE].type = INFF_FW_TYPE_TRXSE; + + fw_data[INFF_FW_NVRAM].fwnames.extension = ".txt"; + fw_data[INFF_FW_NVRAM].fwnames.path = chip_spec->nvram_name; + fw_data[INFF_FW_NVRAM].type = INFF_FW_TYPE_NVRAM; + + fw_data[INFF_FW_CLM].fwnames.extension = ".clm_blob"; + fw_data[INFF_FW_CLM].fwnames.path = chip_spec->clm_name; + fw_data[INFF_FW_CLM].type = INFF_FW_TYPE_CLM; +} diff --git a/drivers/net/wireless/infineon/inffmac/chip_5551x.h b/drivers/net/wireless/infineon/inffmac/chip_5551x.h new file mode 100644 index 000000000000..bd69eb4aa603 --- /dev/null +++ b/drivers/net/wireless/infineon/inffmac/chip_5551x.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: ISC */ +/* + * Copyright (c) 2024-2026, Infineon Technologies AG, or an affiliate of Infineon Technologies AG. + * All rights reserved. + */ + +#include "chip.h" + +/* 55500-A0, Dedicated sapce for TCAM_PATCH and TRX HDR area at RAMSTART */ +#define INF55500_RAM_START (0x3a0000) +#define INF55500_TCAM_SIZE (0x800) +#define INF55500_TRXHDR_SIZE (0x2b4) + +#define INF55500_RAM_BASE (INF55500_RAM_START + INF55500_TCAM_SIZE + \ + INF55500_TRXHDR_SIZE) + +/* 55500-A1, Dedicated sapce for TCAM_PATCH and TRX HDR area at RAMSTART */ +#define INF55500_A1_TCAM_SIZE (0x1000) +#define INF55500_A1_TRXHDR_SIZE (0x20) + +#define INF55500_A1_RAM_BASE (INF55500_RAM_START + INF55500_A1_TCAM_SIZE + \ + INF55500_A1_TRXHDR_SIZE) + +void inff_chip_5551x_init(struct inff_chip *chip); diff --git a/drivers/net/wireless/infineon/inffmac/chip_5557x.c b/drivers/net/wireless/infineon/inffmac/chip_5557x.c new file mode 100644 index 000000000000..a0a1ed64d21b --- /dev/null +++ b/drivers/net/wireless/infineon/inffmac/chip_5557x.c @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: ISC +/* + * Copyright (c) 2024-2026, Infineon Technologies AG, or an affiliate of Infineon Technologies AG. + * All rights reserved. + */ + +#include "chip_5557x.h" + +void inff_chip_5557x_init(struct inff_chip *chip) +{ + struct inff_chip_specific *chip_spec = &chip->chip_spec; + struct inff_fw_dataset *fw_data = &chip_spec->fwdata[0]; + + chip_spec->hw_caps_replaycnts = INFF_CHIP_COMMON_HW_CAPS_REPLAYCNTS; + + chip_spec->hw_chip_rambase = INF55572_RAM_BASE; + chip_spec->hw_chip_tcam_size = INF55572_TCAM_SIZE; + chip_spec->hw_chip_trxhdr_size = INF55572_TRXHDR_SIZE; + + fw_data[INFF_FW_CODE].fwnames.extension = ".trxse"; + fw_data[INFF_FW_CODE].fwnames.path = chip_spec->fw_name; + fw_data[INFF_FW_CODE].type = INFF_FW_TYPE_TRXSE; + + fw_data[INFF_FW_NVRAM].fwnames.extension = ".txt"; + fw_data[INFF_FW_NVRAM].fwnames.path = chip_spec->nvram_name; + fw_data[INFF_FW_NVRAM].type = INFF_FW_TYPE_NVRAM; + + fw_data[INFF_FW_CLM].fwnames.extension = ".clm_blob"; + fw_data[INFF_FW_CLM].fwnames.path = chip_spec->clm_name; + fw_data[INFF_FW_CLM].type = INFF_FW_TYPE_CLM; +} diff --git a/drivers/net/wireless/infineon/inffmac/chip_5557x.h b/drivers/net/wireless/infineon/inffmac/chip_5557x.h new file mode 100644 index 000000000000..76e2d421ceca --- /dev/null +++ b/drivers/net/wireless/infineon/inffmac/chip_5557x.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: ISC */ +/* + * Copyright (c) 2024-2026, Infineon Technologies AG, or an affiliate of Infineon Technologies AG. + * All rights reserved. + */ + +#include "chip.h" + +/* INF55572 dedicated space and RAM base */ +#define INF55572_TCAM_SIZE 0x800 +#define INF55572_TRXHDR_SIZE 0x2b4 +#define INF55572_RAM_BASE (0x370000 + \ + INF55572_TCAM_SIZE + INF55572_TRXHDR_SIZE) + +/* INF55572 SDIO func2 block size */ +#define SDIO_INF55572_FUNC2_BLOCKSIZE 256 + +/* INF55572 watermark expressed in number of words */ +#define INF55572_F2_WATERMARK 0x40 +#define INF55572_MES_WATERMARK 0x40 +#define INF55572_F1_MESBUSYCTRL (INF55572_MES_WATERMARK | \ + SBSDIO_MESBUSYCTRL_ENAB) + +void inff_chip_5557x_init(struct inff_chip *chip); diff --git a/drivers/net/wireless/infineon/inffmac/chip_5591x.c b/drivers/net/wireless/infineon/inffmac/chip_5591x.c new file mode 100644 index 000000000000..ee12c4e10566 --- /dev/null +++ b/drivers/net/wireless/infineon/inffmac/chip_5591x.c @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: ISC +/* + * Copyright (c) 2024-2026, Infineon Technologies AG, or an affiliate of Infineon Technologies AG. + * All rights reserved. + */ + +#include "chip_5591x.h" + +void inff_chip_5591x_init(struct inff_chip *chip) +{ + struct inff_chip_specific *chip_spec = &chip->chip_spec; + struct inff_fw_dataset *fw_data = &chip_spec->fwdata[0]; + + chip_spec->hw_caps_replaycnts = INFF_CHIP_COMMON_HW_CAPS_REPLAYCNTS; + + if (chip->chiprev == 0) { + chip_spec->hw_chip_tcam_size = INF55900_TCAM_SIZE; + chip_spec->hw_chip_trxhdr_size = INF55900_TRXHDR_SIZE; + chip_spec->hw_chip_rambase = INF55900_RAM_BASE; + } else { + chip_spec->hw_chip_tcam_size = INF55900_A1_TCAM_SIZE; + chip_spec->hw_chip_trxhdr_size = INF55900_A1_TRXHDR_SIZE; + chip_spec->hw_chip_rambase = INF55900_A1_RAM_BASE; + } + + fw_data[INFF_FW_CP].fwnames.extension = ".hex"; + fw_data[INFF_FW_CP].fwnames.path = chip_spec->fw_name; + fw_data[INFF_FW_CP].type = INFF_FW_TYPE_HEX; + + fw_data[INFF_FW_BOOT].fwnames.extension = ".hex"; + fw_data[INFF_FW_BOOT].fwnames.path = chip_spec->boot_fw_name; + fw_data[INFF_FW_BOOT].type = INFF_FW_TYPE_HEX; +} diff --git a/drivers/net/wireless/infineon/inffmac/chip_5591x.h b/drivers/net/wireless/infineon/inffmac/chip_5591x.h new file mode 100644 index 000000000000..0f0831cf334d --- /dev/null +++ b/drivers/net/wireless/infineon/inffmac/chip_5591x.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: ISC */ +/* + * Copyright (c) 2024-2026, Infineon Technologies AG, or an affiliate of Infineon Technologies AG. + * All rights reserved. + */ + +#include "chip.h" + +/* 55900-A0, Dedicated sapce for TCAM_PATCH and TRX HDR area at RAMSTART */ +#define INF55900_RAM_START (0x3a0000) +#define INF55900_TCAM_SIZE (0x800) +#define INF55900_TRXHDR_SIZE (0x2b4) + +#define INF55900_RAM_BASE (INF55900_RAM_START + INF55900_TCAM_SIZE + \ + INF55900_TRXHDR_SIZE) + +/* 55900-A1, Dedicated sapce for TCAM_PATCH and TRX HDR area at RAMSTART */ +#define INF55900_A1_TCAM_SIZE (0x1000) +#define INF55900_A1_TRXHDR_SIZE (0x20) + +#define INF55900_A1_RAM_BASE (INF55900_RAM_START + INF55900_A1_TCAM_SIZE + \ + INF55900_A1_TRXHDR_SIZE) + +/* INF55900 SDIO func2 block size */ +#define SDIO_INF55900_FUNC2_BLOCKSIZE 256 + +/* INF55900 watermark expressed in number of words */ +#define INF55900_F2_WATERMARK 0x40 +#define INF55900_MES_WATERMARK 0x40 +#define INF55900_F1_MESBUSYCTRL (INF55900_MES_WATERMARK | \ + SBSDIO_MESBUSYCTRL_ENAB) + +#define CYW5591x_BOOTFW_RAM_LD_ADDR 0x80420000 +#define CYW5591x_FWDWNLD_RAM_WR_ADDR 0x80470000 +#define CYW5591x_IMAGE_LAUNCH_ADDR 0xffffffff + +void inff_chip_5591x_init(struct inff_chip *chip); -- 2.25.1