[Specification] [TitleIndex] [WordIndex

Description

The ADSL PHY is a separate Mips System with its memory mapped into the host address space, but can also access the host's RAM. The ADSL PHY Firmwares can be used on any SoC with the same ADSL PHY Version.

ADSL PHY Version

DSL Standard

Used in SoC

A

ADSL2

BCM6345 (BCM6335?)

B

ADSL2+

BCM6338, BCM6348, BCM6358

C

ADSL2+, VDSL2

BCM6368

D

ADSL2+

BCM6328, BCM6362

F

ADSL2+, VDSL2

BCM63168

Memory Access

The adsl phy local memory is accessible at the following range:

chip

host

phy

size

BCM6338
BCM6345
BCM6348
BCM6358

0xfff00000

0x19000000

256k?

BCM6328
BCM6362

0xb0d80000

0x19000000

?

BCM6368

0xb0f80000

0x19000000

?

BCM63168

0xb0780000

0x19000000

?

To access the host's ram, the adsl phy maps a 2 MiB (BCM6345: 512KiB) block of ram containing the Firmware into its own address space at 0x10000000.

Adsl Phy Firmware

The Adsl Phy requires a separate firmware for the Adsl Mips core. It consists of two parts, a smaller one loaded into the memory of the Adsl Mips core, and a bigger one loaded into the uppermost part of the host system ram. There are separate firmwares for different annexes.

File Header

Each adsl_phy.bin has a 32 byte long header:

offset

size

usage

Notes

0x00

32 bit

header

always 0x41200000 ('A \0\0')

0x04

32 bit

lmemImageOffset

offset of the adsl mips part in the file

0x08

32 bit

lmemImageLen

length of the adsl mips part

0x0c

32 bit

sdramImageOffset

offset of the shared part in the file

0x10

32 bit

sdramImageLength

length of the shared part

0x14 - 0x1f

???

seems to be always zero.

Communicating with the Phy

The adsl phy provides an interface for sending and receiving messages. All pointers are assumed to be phy local, not host local, so need to be converted when accessing. The interface is located at the following offset in the LMEM:

chip

offset

BCM6345

0x17f90

BCM6338
BCM6348
BCM6358
BCM6328
BCM6362

0x21f90

BCM6368
BCM63168

0x5ff90

Interface Layout

offset

size

usage

Notes

0x00

6 * 32 bit

Status Buffer Pointers

used for receiving status updates

0x18

6 * 32 bit

Command Buffer Pointers

used for sending commands

0x30

15 * 32 bit

GFC Table

0x6c

32 bit

Sdram Base

points to the beginning of the reserved RAM in KSEG1

Buffer Pointer Layout

All pointers are 32 bit big and in Adsl Phy address space.

offset

usage

Notes

0x00

start

start of the buffer

0x04

end

end of the regular buffer

0x08

extra end

end of the additional buffer space

0x0c

stretch end

current usage of the additional buffer space

0x10

read

current read pointer

0x14

write

current write pointer

Messages

All Messages exchanged are aligned to 4 byte (filled to a multiple of 4 if necessary), and are followed by the sequence 0x55aa1234. All messages are at least 8 byte long, excluding the magic value at the end. Essentially it is:

<MessageType>

<Content>+

0x55aa1234

Checking for available Messages

Receiving Messages

Sending Messages

See PhyMessages for all known messages.