mbox

[R/master] Arm multiplatform support

Message ID 20130128232415.GD4564@luxor.wired.org
State New
Headers show

Pull-request

git://kernel.ubuntu.com/ppisati/ubuntu-raring.git multiplatform

Message

Paolo Pisati Jan. 28, 2013, 11:24 p.m. UTC
Two of the goals set for Raring arm were to:

a) fold omap3 and omap4 in a single branch
b) ship a single kernel with multi Soc support

so here it is the first batch of patches to:

1) collapse omap3 and omap4 support in master
2) give our kernel arm multiplatform support (TI omap3/4 and Freescale imx6 ATM)
3) enable DTBs for multiple boards support (only needed for imx ATM)

Some comments:

- the Tony Lindgren (9) patches are the actual OMAP multiplatform support (or
  actually the missing bits that didn't make the 3.8 window) and are slated for a
  3.9 inclusion:

http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap.git;a=shortlog;h=refs/heads/omap-for-v3.9/multiplatform-v2

- the Andy Green (3) patches are not strictly necessary, but are the only way to
  get a fixed MAC address on pandaboards instead of a random one at every
  reboot, and we are already carrying them as part of the omap4 branch:

http://kernel.ubuntu.com/git?p=ubuntu/ubuntu-quantal.git;a=commit;h=f7d0f1eda6a4305fbc4e8d4a41d003ef5b2daf27
http://kernel.ubuntu.com/git?p=ubuntu/ubuntu-quantal.git;a=commit;h=7fb188d909291bc4f6dcccf729684bc69168da3f
http://kernel.ubuntu.com/git?p=ubuntu/ubuntu-quantal.git;a=commit;h=7027eb61ef4d8e676327ab15b3b904b7403c6799

The rest are config changes, plus a modification to the way we handle DTBs so we
can specify more than one file.

Main issues with this pull:

omap:
- CPU_FREQ was disabled since mainline is missing some critical pieces for omap4 (and
  it leds to all kinds of panics on boot):

http://www.mail-archive.com/linux-omap@vger.kernel.org/msg83951.html

- omap4 pvr driver (3d hw accelerated) is not supported ATM (but vanilla /dev/fb
  works fine)

imx6:
- USB_SUSPEND was disabled since it broke usb (but it was ok in 3.7, regression)

- sata was working in 3.7 + 1 patch, but it doesn't work in 3.8
  (another regression)

- video output is not working ATM

Last but not least, the generated kernel is still called '-omap' so you need
some tweaking to flash-kernel to install it on imx6, and i would like to rename
it as '-arm' in the future, any thoughts?

As you can imagine it's still a big work in progress but i wanted to pull it now
so we can get some testing, feedback and user space people can do their
plumbing.

Enjoy.

The following changes since commit f4ea18eb86c8418ccde4e5278d6e48b2ce563afa:

  UBUNTU: [Config] Move 9p modules into generic package (2013-01-28 11:53:20 -0800)

are available in the git repository at:

  git://kernel.ubuntu.com/ppisati/ubuntu-raring.git multiplatform

for you to fetch changes up to 9de183028054c9f07c6a1d2566cb22f534d7b374:

  UBUNTU: [Config] SPI_IMX=m (2013-01-28 21:36:47 +0100)

----------------------------------------------------------------
Andy Green (3):
      ARM: OMAP2+: add cpu id register to MAC address helper
      ARM: omap2 add mac address allocation register api
      ARM: omap2 panda register ethernet and wlan for automatic mac allocation

Paolo Pisati (19):
      UBUNTU: SAUCE: davinci: vpss: compilation fix
      UBUNTU: [Config] enable TI OMAP4 support (Pandaboard/ES)
      UBUNTU: [Config] OMAP_USB2=y (since TWL6030_USB depends on it)
      UBUNTU: [Config] enable Freescale IMX6 support (SabreLite)
      UBUNTU: [Config] SERIAL_IMX_CONSOLE=y
      UBUNTU: [Config] MMC_*_IMX=y
      UBUNTU: [Config] disable USB_SUSPEND
      UBUNTU: [Config] USB_MXS_PHY=y
      UBUNTU: [Config] USB_CHIPIDEA=y
      UBUNTU: SAUCE: DTB: add support for multiple DTBs
      UBUNTU: SAUCE: DTB: build imx6q-sabrelite
      UBUNTU: SAUCE: DTB: build beaglexm
      UBUNTU: SAUCE: DTB: build panda/panda es
      UBUNTU: [Config] disable CPU_FREQ
      UBUNTU: [Config] PANEL_TFP410=y (video DVI output)
      UBUNTU: [Config] SND_OMAP_SOC*=y
      UBUNTU: [Config] SND_IMX_SOC*=y
      UBUNTU: [Config] I2C_IMX=y
      UBUNTU: [Config] SPI_IMX=m

Tony Lindgren (9):
      ARM: OMAP2+: Limit omap initcalls to omap only on multiplatform kernels
      ARM: OMAP2+: Use omap initcalls
      ARM: OMAP: Fix i2c cmdline initcall for multiplatform
      ARM: OMAP: Fix dmaengine init for multiplatform
      ARM: OMAP2+: Add multiplatform debug_ll support
      ARM: OMAP2+: Disable code that currently does not work with multiplaform
      ARM: OMAP2+: Enable ARCH_MULTIPLATFORM support
      ARM: OMAP2+: Add minimal support for booting vexpress
      ARM: OMAP2+: Remove now obsolete uncompress.h and debug-macro.S

 arch/arm/Kconfig                                                              | 13 ++++++--
 arch/arm/Kconfig.debug                                                        | 56 ++++++++++++++++++++++++++++++++
 arch/arm/configs/omap2plus_defconfig                                          | 6 +++-
 arch/arm/{mach-omap2/include/mach/debug-macro.S => include/debug/omap2plus.S} | 137 +++++++++++++++++++++++++++++++++++++++++++++--------------------------------
 arch/arm/mach-omap1/dma.c                                                     | 18 +++++++++--
 arch/arm/mach-omap1/i2c.c                                                     | 6 ++++
 arch/arm/mach-omap2/Kconfig                                                   | 25 +++++++++++++-
 arch/arm/mach-omap2/Makefile                                                  | 3 ++
 arch/arm/mach-omap2/board-omap3beagle.c                                       | 2 +-
 arch/arm/mach-omap2/board-omap4panda.c                                        | 14 ++++++++
 arch/arm/mach-omap2/board-rx51-video.c                                        | 3 +-
 arch/arm/mach-omap2/clock2xxx.c                                               | 2 +-
 arch/arm/mach-omap2/clock3xxx.c                                               | 2 +-
 arch/arm/mach-omap2/common.h                                                  | 2 ++
 arch/arm/mach-omap2/devices.c                                                 | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 arch/arm/mach-omap2/dma.c                                                     | 23 +++++++++++--
 arch/arm/mach-omap2/drm.c                                                     | 2 +-
 arch/arm/mach-omap2/emu.c                                                     | 2 +-
 arch/arm/mach-omap2/fb.c                                                      | 4 +--
 arch/arm/mach-omap2/gpio.c                                                    | 5 +--
 arch/arm/mach-omap2/gpmc.c                                                    | 4 +--
 arch/arm/mach-omap2/hdq1w.c                                                   | 3 +-
 arch/arm/mach-omap2/hwspinlock.c                                              | 2 +-
 arch/arm/mach-omap2/i2c.c                                                     | 5 +++
 arch/arm/mach-omap2/id.c                                                      | 40 +++++++++++++++++++++++
 arch/arm/mach-omap2/id.h                                                      | 1 +
 arch/arm/mach-omap2/include/mach/serial.h                                     | 37 ---------------------
 arch/arm/mach-omap2/include/mach/uncompress.h                                 | 176 ---------------------------------------------------------------------------------------------------
 arch/arm/mach-omap2/mcbsp.c                                                   | 3 +-
 arch/arm/mach-omap2/omap-iommu.c                                              | 2 +-
 arch/arm/mach-omap2/omap2-restart.c                                           | 3 +-
 arch/arm/mach-omap2/omap4-common.c                                            | 4 +--
 arch/arm/mach-omap2/omap_device.c                                             | 5 +--
 arch/arm/mach-omap2/omap_hwmod.c                                              | 2 +-
 arch/arm/mach-omap2/omap_phy_internal.c                                       | 2 +-
 arch/arm/mach-omap2/opp3xxx_data.c                                            | 2 +-
 arch/arm/mach-omap2/opp4xxx_data.c                                            | 2 +-
 arch/arm/mach-omap2/pm-debug.c                                                | 2 +-
 arch/arm/mach-omap2/pm.c                                                      | 2 +-
 arch/arm/mach-omap2/pmu.c                                                     | 2 +-
 arch/arm/mach-omap2/prm3xxx.c                                                 | 2 +-
 arch/arm/mach-omap2/prm44xx.c                                                 | 2 +-
 arch/arm/mach-omap2/serial.c                                                  | 2 +-
 arch/arm/mach-omap2/smartreflex-class3.c                                      | 2 +-
 arch/arm/mach-omap2/soc.h                                                     | 29 +++++++++++++++++
 arch/arm/mach-omap2/timer.c                                                   | 2 +-
 arch/arm/mach-omap2/wd_timer.c                                                | 2 +-
 arch/arm/plat-omap/Kconfig                                                    | 32 +-----------------
 arch/arm/plat-omap/Makefile                                                   | 2 ++
 arch/arm/plat-omap/i2c.c                                                      | 3 +-
 arch/arm/plat-omap/include/plat/i2c.h                                         | 6 ++++
 debian.master/config/amd64/config.common.amd64                                | 7 ++++
 debian.master/config/armhf/config.common.armhf                                | 2 ++
 debian.master/config/armhf/config.flavour.highbank                            | 24 ++++++++++++--
 debian.master/config/armhf/config.flavour.omap                                | 27 ++++++++++++++--
 debian.master/config/config.common.ubuntu                                     | 87 ++++++++++++++++++++++++++++++++++++++-----------
 debian.master/config/i386/config.common.i386                                  | 7 ++++
 debian.master/rules.d/armhf.mk                                                | 1 +
 debian/rules.d/2-binary-arch.mk                                               | 13 ++++----
 drivers/crypto/omap-sham.c                                                    | 3 ++
 drivers/dma/omap-dma.c                                                        | 20 +-----------
 drivers/media/platform/davinci/vpss.c                                         | 1 -
 drivers/media/rc/Kconfig                                                      | 2 +-
 drivers/staging/tidspbridge/Kconfig                                           | 2 +-
 64 files changed, 597 insertions(+), 400 deletions(-)
 rename arch/arm/{mach-omap2/include/mach/debug-macro.S => include/debug/omap2plus.S} (56%)
 delete mode 100644 arch/arm/mach-omap2/include/mach/uncompress.h

Comments

Leann Ogasawara Jan. 30, 2013, 5:39 a.m. UTC | #1
On 01/28/2013 03:24 PM, Paolo Pisati wrote:
> Two of the goals set for Raring arm were to:
>
> a) fold omap3 and omap4 in a single branch
> b) ship a single kernel with multi Soc support
>
> so here it is the first batch of patches to:
>
> 1) collapse omap3 and omap4 support in master
> 2) give our kernel arm multiplatform support (TI omap3/4 and Freescale imx6 ATM)
> 3) enable DTBs for multiple boards support (only needed for imx ATM)
>
> Some comments:
>
> - the Tony Lindgren (9) patches are the actual OMAP multiplatform support (or
>   actually the missing bits that didn't make the 3.8 window) and are slated for a
>   3.9 inclusion:
>
> http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap.git;a=shortlog;h=refs/heads/omap-for-v3.9/multiplatform-v2

These also already look to be queued in linux-next.  I've updated these
9 patches to mark them as SAUCE for now since they're not yet officially
in Linus' tree and I added a note regarding their origin and current
upstream status.

>
> - the Andy Green (3) patches are not strictly necessary, but are the only way to
>   get a fixed MAC address on pandaboards instead of a random one at every
>   reboot, and we are already carrying them as part of the omap4 branch:
>
> http://kernel.ubuntu.com/git?p=ubuntu/ubuntu-quantal.git;a=commit;h=f7d0f1eda6a4305fbc4e8d4a41d003ef5b2daf27
> http://kernel.ubuntu.com/git?p=ubuntu/ubuntu-quantal.git;a=commit;h=7fb188d909291bc4f6dcccf729684bc69168da3f
> http://kernel.ubuntu.com/git?p=ubuntu/ubuntu-quantal.git;a=commit;h=7027eb61ef4d8e676327ab15b3b904b7403c6799

Looks reasonable to continue carrying in Raring.  I also marked these as
SAUCE for now as they do not appear to be upstream yet.

>
> The rest are config changes, plus a modification to the way we handle DTBs so we
> can specify more than one file.
>
> Main issues with this pull:
>
> omap:
> - CPU_FREQ was disabled since mainline is missing some critical pieces for omap4 (and
>   it leds to all kinds of panics on boot):
>
> http://www.mail-archive.com/linux-omap@vger.kernel.org/msg83951.html
>
> - omap4 pvr driver (3d hw accelerated) is not supported ATM (but vanilla /dev/fb
>   works fine)
>
> imx6:
> - USB_SUSPEND was disabled since it broke usb (but it was ok in 3.7, regression)
>
> - sata was working in 3.7 + 1 patch, but it doesn't work in 3.8
>   (another regression)
>
> - video output is not working ATM
>
> Last but not least, the generated kernel is still called '-omap' so you need
> some tweaking to flash-kernel to install it on imx6, and i would like to rename
> it as '-arm' in the future, any thoughts?

Sounds reasonable.  I assume we'll want to resolve some of these known
issues you've listed above before we proceed re-directing the meta
packages to point to the unified -arm kernel.

>
> As you can imagine it's still a big work in progress but i wanted to pull it now
> so we can get some testing, feedback and user space people can do their
> plumbing.
>
> Enjoy.

I've applied to Raring master-next.  However, I'd appreciate a few more
eyes for review before I pull the trigger on an upload.

Thanks,
Leann

>
> The following changes since commit f4ea18eb86c8418ccde4e5278d6e48b2ce563afa:
>
>   UBUNTU: [Config] Move 9p modules into generic package (2013-01-28 11:53:20 -0800)
>
> are available in the git repository at:
>
>   git://kernel.ubuntu.com/ppisati/ubuntu-raring.git multiplatform
>
> for you to fetch changes up to 9de183028054c9f07c6a1d2566cb22f534d7b374:
>
>   UBUNTU: [Config] SPI_IMX=m (2013-01-28 21:36:47 +0100)
>
> ----------------------------------------------------------------
> Andy Green (3):
>       ARM: OMAP2+: add cpu id register to MAC address helper
>       ARM: omap2 add mac address allocation register api
>       ARM: omap2 panda register ethernet and wlan for automatic mac allocation
>
> Paolo Pisati (19):
>       UBUNTU: SAUCE: davinci: vpss: compilation fix
>       UBUNTU: [Config] enable TI OMAP4 support (Pandaboard/ES)
>       UBUNTU: [Config] OMAP_USB2=y (since TWL6030_USB depends on it)
>       UBUNTU: [Config] enable Freescale IMX6 support (SabreLite)
>       UBUNTU: [Config] SERIAL_IMX_CONSOLE=y
>       UBUNTU: [Config] MMC_*_IMX=y
>       UBUNTU: [Config] disable USB_SUSPEND
>       UBUNTU: [Config] USB_MXS_PHY=y
>       UBUNTU: [Config] USB_CHIPIDEA=y
>       UBUNTU: SAUCE: DTB: add support for multiple DTBs
>       UBUNTU: SAUCE: DTB: build imx6q-sabrelite
>       UBUNTU: SAUCE: DTB: build beaglexm
>       UBUNTU: SAUCE: DTB: build panda/panda es
>       UBUNTU: [Config] disable CPU_FREQ
>       UBUNTU: [Config] PANEL_TFP410=y (video DVI output)
>       UBUNTU: [Config] SND_OMAP_SOC*=y
>       UBUNTU: [Config] SND_IMX_SOC*=y
>       UBUNTU: [Config] I2C_IMX=y
>       UBUNTU: [Config] SPI_IMX=m
>
> Tony Lindgren (9):
>       ARM: OMAP2+: Limit omap initcalls to omap only on multiplatform kernels
>       ARM: OMAP2+: Use omap initcalls
>       ARM: OMAP: Fix i2c cmdline initcall for multiplatform
>       ARM: OMAP: Fix dmaengine init for multiplatform
>       ARM: OMAP2+: Add multiplatform debug_ll support
>       ARM: OMAP2+: Disable code that currently does not work with multiplaform
>       ARM: OMAP2+: Enable ARCH_MULTIPLATFORM support
>       ARM: OMAP2+: Add minimal support for booting vexpress
>       ARM: OMAP2+: Remove now obsolete uncompress.h and debug-macro.S
>
>  arch/arm/Kconfig                                                              | 13 ++++++--
>  arch/arm/Kconfig.debug                                                        | 56 ++++++++++++++++++++++++++++++++
>  arch/arm/configs/omap2plus_defconfig                                          | 6 +++-
>  arch/arm/{mach-omap2/include/mach/debug-macro.S => include/debug/omap2plus.S} | 137 +++++++++++++++++++++++++++++++++++++++++++++--------------------------------
>  arch/arm/mach-omap1/dma.c                                                     | 18 +++++++++--
>  arch/arm/mach-omap1/i2c.c                                                     | 6 ++++
>  arch/arm/mach-omap2/Kconfig                                                   | 25 +++++++++++++-
>  arch/arm/mach-omap2/Makefile                                                  | 3 ++
>  arch/arm/mach-omap2/board-omap3beagle.c                                       | 2 +-
>  arch/arm/mach-omap2/board-omap4panda.c                                        | 14 ++++++++
>  arch/arm/mach-omap2/board-rx51-video.c                                        | 3 +-
>  arch/arm/mach-omap2/clock2xxx.c                                               | 2 +-
>  arch/arm/mach-omap2/clock3xxx.c                                               | 2 +-
>  arch/arm/mach-omap2/common.h                                                  | 2 ++
>  arch/arm/mach-omap2/devices.c                                                 | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++--
>  arch/arm/mach-omap2/dma.c                                                     | 23 +++++++++++--
>  arch/arm/mach-omap2/drm.c                                                     | 2 +-
>  arch/arm/mach-omap2/emu.c                                                     | 2 +-
>  arch/arm/mach-omap2/fb.c                                                      | 4 +--
>  arch/arm/mach-omap2/gpio.c                                                    | 5 +--
>  arch/arm/mach-omap2/gpmc.c                                                    | 4 +--
>  arch/arm/mach-omap2/hdq1w.c                                                   | 3 +-
>  arch/arm/mach-omap2/hwspinlock.c                                              | 2 +-
>  arch/arm/mach-omap2/i2c.c                                                     | 5 +++
>  arch/arm/mach-omap2/id.c                                                      | 40 +++++++++++++++++++++++
>  arch/arm/mach-omap2/id.h                                                      | 1 +
>  arch/arm/mach-omap2/include/mach/serial.h                                     | 37 ---------------------
>  arch/arm/mach-omap2/include/mach/uncompress.h                                 | 176 ---------------------------------------------------------------------------------------------------
>  arch/arm/mach-omap2/mcbsp.c                                                   | 3 +-
>  arch/arm/mach-omap2/omap-iommu.c                                              | 2 +-
>  arch/arm/mach-omap2/omap2-restart.c                                           | 3 +-
>  arch/arm/mach-omap2/omap4-common.c                                            | 4 +--
>  arch/arm/mach-omap2/omap_device.c                                             | 5 +--
>  arch/arm/mach-omap2/omap_hwmod.c                                              | 2 +-
>  arch/arm/mach-omap2/omap_phy_internal.c                                       | 2 +-
>  arch/arm/mach-omap2/opp3xxx_data.c                                            | 2 +-
>  arch/arm/mach-omap2/opp4xxx_data.c                                            | 2 +-
>  arch/arm/mach-omap2/pm-debug.c                                                | 2 +-
>  arch/arm/mach-omap2/pm.c                                                      | 2 +-
>  arch/arm/mach-omap2/pmu.c                                                     | 2 +-
>  arch/arm/mach-omap2/prm3xxx.c                                                 | 2 +-
>  arch/arm/mach-omap2/prm44xx.c                                                 | 2 +-
>  arch/arm/mach-omap2/serial.c                                                  | 2 +-
>  arch/arm/mach-omap2/smartreflex-class3.c                                      | 2 +-
>  arch/arm/mach-omap2/soc.h                                                     | 29 +++++++++++++++++
>  arch/arm/mach-omap2/timer.c                                                   | 2 +-
>  arch/arm/mach-omap2/wd_timer.c                                                | 2 +-
>  arch/arm/plat-omap/Kconfig                                                    | 32 +-----------------
>  arch/arm/plat-omap/Makefile                                                   | 2 ++
>  arch/arm/plat-omap/i2c.c                                                      | 3 +-
>  arch/arm/plat-omap/include/plat/i2c.h                                         | 6 ++++
>  debian.master/config/amd64/config.common.amd64                                | 7 ++++
>  debian.master/config/armhf/config.common.armhf                                | 2 ++
>  debian.master/config/armhf/config.flavour.highbank                            | 24 ++++++++++++--
>  debian.master/config/armhf/config.flavour.omap                                | 27 ++++++++++++++--
>  debian.master/config/config.common.ubuntu                                     | 87 ++++++++++++++++++++++++++++++++++++++-----------
>  debian.master/config/i386/config.common.i386                                  | 7 ++++
>  debian.master/rules.d/armhf.mk                                                | 1 +
>  debian/rules.d/2-binary-arch.mk                                               | 13 ++++----
>  drivers/crypto/omap-sham.c                                                    | 3 ++
>  drivers/dma/omap-dma.c                                                        | 20 +-----------
>  drivers/media/platform/davinci/vpss.c                                         | 1 -
>  drivers/media/rc/Kconfig                                                      | 2 +-
>  drivers/staging/tidspbridge/Kconfig                                           | 2 +-
>  64 files changed, 597 insertions(+), 400 deletions(-)
>  rename arch/arm/{mach-omap2/include/mach/debug-macro.S => include/debug/omap2plus.S} (56%)
>  delete mode 100644 arch/arm/mach-omap2/include/mach/uncompress.h
>
Paolo Pisati Jan. 30, 2013, 4 p.m. UTC | #2
On Tue, Jan 29, 2013 at 09:39:12PM -0800, Leann Ogasawara wrote:
> 
> Sounds reasonable.  I assume we'll want to resolve some of these known
> issues you've listed above before we proceed re-directing the meta
> packages to point to the unified -arm kernel.

yep, better if we hold on updating metas until we are on par wrt the Q
kernles, i'll let you know when we are good to go.
Oliver Grawert Jan. 30, 2013, 4:16 p.m. UTC | #3
hi,
Am Mittwoch, den 30.01.2013, 17:00 +0100 schrieb Paolo Pisati:
> On Tue, Jan 29, 2013 at 09:39:12PM -0800, Leann Ogasawara wrote:
> > 
> > Sounds reasonable.  I assume we'll want to resolve some of these known
> > issues you've listed above before we proceed re-directing the meta
> > packages to point to the unified -arm kernel.
> 
> yep, better if we hold on updating metas until we are on par wrt the Q
> kernles, i'll let you know when we are good to go.
> -- 
note that full support of the binary xorg driver is essential on the
pandaboard desktop images, the new kernels need to be tested against
this if we want to put them in as default.

ciao
	oli
Andy Whitcroft Jan. 31, 2013, 1:40 p.m. UTC | #4
On Tue, Jan 29, 2013 at 12:24:15AM +0100, Paolo Pisati wrote:
> Two of the goals set for Raring arm were to:
> 
> a) fold omap3 and omap4 in a single branch
> b) ship a single kernel with multi Soc support
> 
> so here it is the first batch of patches to:
> 
> 1) collapse omap3 and omap4 support in master
> 2) give our kernel arm multiplatform support (TI omap3/4 and Freescale imx6 ATM)
> 3) enable DTBs for multiple boards support (only needed for imx ATM)

Overall this looks fine.  The packaging changes are good to my eye.  I
have built an -omap out of this and used it to boot my -omap4 board
successfully.

I think long term it would change to be -generic or -generic-nonpae (if
we think a PAE version would ever be needed) to fit in with the naming
we in other flavours.  However, in the very short term I think it is
completley reasonable to keep it as -omap while we play with things, as
it primarily supports OMAP3/4 for our supported platforms anyhow.  Once
we are in a position to map -omap4 to it, that would likely be the time
to change the name to a generic style one.

Overall:

Acked-by: Andy Whitcroft <apw@canonical.com>

-apw