/*
 * Copyright 2021-2022, 2024 NXP
 *
 * SPDX-License-Identifier: Apache-2.0
 */

GROUP_START(USB_BDT)

	SECTION_PROLOGUE(_USB_BDT_SECTION_NAME,(NOLOAD),)
	{
		. = ALIGN(512);
		*(m_usb_bdt)
	} GROUP_LINK_IN(SRAM1)

GROUP_END(USB_BDT)

GROUP_START(USB_GLOBAL)

	SECTION_PROLOGUE(_USB_GLOBAL_SECTION_NAME,(NOLOAD),)
	{
		*(m_usb_global)
	} GROUP_LINK_IN(SRAM1)

GROUP_END(USB_GLOBAL)
